Python正則表達式re模塊中有個group參數,剛開始看的時候沒理解,自己摸索了一下,終於知道是啥意思了,記錄一下。
先看一下教程中對這個參數的說明:
老實講,看了這個描述我也沒懂是啥意思,於是在PyCharm中試了下,才知道是啥意思,先看下代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
def dirp(iter): # 定義函數dirp
return [i for i in dir(iter) if not i.startswith('_')] # 將dir(iter)的值中過濾掉前面帶_的數據后,賦值給變量i,然后將i的值賦值給dirp函數
# 定義一個變量a,並將字符串“name”賦值給變量a,字符串前面加個r是告訴編譯器這個string是個raw string,不要轉意
a = r"name"
# print(dirp(re))
# 定義一個變量match
match = re.search(a, "my name is sam,what is you name?")
if match:
print(match.group()) # 在字符串“my name is sam,what is you name?”中搜索“name”,如果存在就打印出來
print(match.start()) # 如果有就打印該字符的開始位置,字符串“my name is sam,what is you name?”的m是第0位
print(match.end()) # 打印字符串的結束位置
print(match.span()) # 打印字符串的開始位置和結束位置
print(type(match.group)) # 打印match.group()的類型
www = r"www.cnblogs.com"
print(re.match(r"(www).(cnblogs).(com)", www).group()) # 打印全部匹配結果,注意每個括號匹配值必須接上一個括號,否則會報錯
print(re.match(r"(www).(cnblogs).(com)", www).group(1)) # 打印第一個括號中的匹配結果
print(re.match(r"(www).(cnblogs).(com)", www).group(2)) # 打印第二個括號中的匹配結果
print(re.match(r"(www).(cnblogs).(com)", www).group(3)) # 打印第三個括號中的匹配結果
print(re.match(r"(www).cnblogs.(com)", www).group(2)) # 打印第二個括號中的匹配結果
print(re.match(r"(www).(cnblogs).(com)", www).groups()) # 打印所有括號的匹配結果,但是返回的結果是一個元組
line = "Cars are smarter than dog."
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
if matchObj:
print("matchObj.group(): ", matchObj.group())
print("matchObj.group(1): ", matchObj.group(1))
print("matchObj.group(2): ", matchObj.group(2))
else:
print("No match!!")
執行后查看輸出結果:
C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe C:\Users\Administrator\Desktop\mypython\re_test.py
name
3
7
(3, 7)
<class 'builtin_function_or_method'>
www.cnblogs.com
www
cnblogs
com
com
('www', 'cnblogs', 'com')
matchObj.group(): Cars are smarter than dog.
matchObj.group(1): Cars
matchObj.group(2): smarter
進程已結束,退出代碼0
從結果中可以看出來,group這個參數的意思就是給出多個匹配值,然后在字符串中進行匹配,然后輸出對應的匹配結果,group(),這個()中的數字按從左往右的順序1,2....進行排列(注意只有用()括起來的匹配值才算),然后還要注意就是每個匹配值之間要能接上,比如匹配值寫成下面這樣的話就會報錯,因為匹配值之間少了個點,匹配的值就接不上:
"(www)(cnblogs)(com)"