日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

re正则匹配之re.search(group groups groupdict)

發布時間:2023/12/13 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 re正则匹配之re.search(group groups groupdict) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

re.search掃描整個字符串并返回第一個成功的匹配。re.findall返回字符串中所有不重疊匹配項的列表,如果沒有匹配到返回空list不會報錯。
search匹配對象有3個方法:group() groups() groupdict() ,這3個方法使用上會有一些差異。
如果只需匹配一個,匹配到就結束就用search,匹配全部就用findall

re.search(pattern,string,flags = 0 )

search掃描整個字符串并返回第一個成功的匹配,如果沒匹配到返回None
函數參數說明:

pattern 匹配的正則表達式
string 要匹配的字符串。
flags 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等

search示例之三種基礎寫法

正則表達式前面加上r,表示原生字符串(rawstring)
import  re

#基礎寫法一 
kk=re.compile(r'd+') #r表示原生字符串
result=kk.search('123abc456')
print(result) #<re.Match object; span=(0, 3), match='123'>

#基礎寫法二 注意此處search()的用法,可傳兩個參數
kk=re.compile(r'd+')
result=re.search(kk,'123abc456')
print(result) #<re.Match object; span=(0, 3), match='123'>

#基礎寫法三 也可以直接在search傳2個參數
result=re.search(r'd+','123abc456')
print(result) #<re.Match object; span=(0, 3), match='123'>
print(result.group()) #123

group()的使用

group(0) 是獲取取得的字符串整體,group(1)是取出括號里面我們要匹配的內容
group(0)和group()效果相同,均為獲取取得的字符串整體

group(1) 列出第一個括號匹配部分,group(2) 列出第二個括號匹配部分,group(3) 列出第三個括號匹配部分。如果沒匹配到返回的是None,調用group(1)方法會拋異常

示例1

import re

# 取出url地址
a = '百度地址:www.baidu.com,歡迎使用!!!'
res = re.search(r'百度地址:(.*?),歡迎', a)
print(res)  # 返回match對象 <re.Match object; span=(0, 21), match='百度地址:www.baidu.com,歡迎'>
print(res.group(1)) # www.baidu.com

如果匹配到返回一個Match object對象,用group(1)取出匹配的值。

如果沒匹配到返回的是None,調用group(1)方法會拋異常

import re

# 取出url地址
a = '百度地址:www.baidu.com,歡迎使用!!!'
res = re.search(r'百度地址11111111:(.*?),歡迎', a)
print(res)  # 返回match對象 <re.Match object; span=(0, 21), match='百度地址:www.baidu.com,歡迎'>
print(res.group(1)) # www.baidu.com

如果整個字符串中,有多個值需要匹配,想同時取出,請看以下例子

import re

# 取出url地址
a = '百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎使用!!!'
res = re.search(r'百度地址:(.*?),微博地址:(.*?),歡迎', a)
print(res)  # <re.Match object; span=(0, 40), match='百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎'>
print(res.group()) #  百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎
print(res.group(0)) # 百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎
print(res.group(1)) # www.baidu.com
print(res.group(2)) # www.weibo.com
print(res.group(0,1,2)) # ('百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎使用!!!','www.baidu.com', 'www.weibo.com')

以上例子可以看出:

group() 跟group(0)一樣是獲取匹配的整個字符串
group(1) 取出匹配的第一個值
group(2) 取出匹配的第二個值
group,0,1, 2) 同時取出上面對應的2個值,返回元祖

groups()的使用

匹配對象的groups()方法返回一個包含所有參與匹配的子組(不含組0)的匹配到的搜索文本子串的元組。

import re

# 取出url地址
a = '百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎使用!!!'
res = re.search(r'百度地址:(.*?),微博地址:(.+?),歡迎使用!!!', a)
# 返回一個包含所有參與匹配的子組(不含組0)
print(res.groups()) #('www.baidu.com', 'www.weibo.com')
# 返回匹配的group(1), group(2) 其中不含group(0)
print(res.group(1,2)) #('www.baidu.com', 'www.weibo.com')

group(0, 1, 2)可以獲取到3個值,但是group(0)我們一般不常用,一般是獲取后面兩個要取的值。
這里的groups() 的功能就是取出所有的要匹配的值,不包含group(0)

groupdict() 的使用

groupdict返回一個包含所有匹配到的命名組的組名為鍵值和命名組匹配到的搜索文本子串為值作為元素的字典,且groudict僅能訪問命名組數據

import re

# 取出url地址
a = '百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎使用!!!'
res = re.search(r'百度地址:(.*?),微博地址:(.+?),歡迎使用!!!', a)
print(res.groupdict())  #返回{}

上面的匹配返回有個空的dict,因為我們沒用到變量命名匹配的內容,這種里面定義變量可以使用?P<variable>

import re

# 取出url地址
a = '百度地址:www.baidu.com,微博地址:www.weibo.com,歡迎使用!!!'
res = re.search(r'百度地址:(?P<baidu>.*?),微博地址:(?P<weibo>.+?),歡迎使用!!!', a)
print(res.groupdict())  #返回 {'baidu': 'www.baidu.com', 'weibo': 'www.weibo.com'}

給要匹配的兩個值添加變量,于是就可以得到字典結果了:{"百度": "www.baidu.com", "weibo": "www.weibo.com"}
字典取值就可以根據鍵值對很好的取值了

總結

以上是生活随笔為你收集整理的re正则匹配之re.search(group groups groupdict)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。