1. 程式人生 > 實用技巧 >Python 正則表示式中的group引數使用

Python 正則表示式中的group引數使用

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)) # 列印第二個括號中的匹配結果 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
['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', 'compile', 'copyreg', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']
name
3
7
(3, 7)
<class 'builtin_function_or_method'>
www.cnblogs.com
www
cnblogs
com
com
matchObj.group():  Cars are smarter than dog.
matchObj.group(1):  Cars
matchObj.group(2):  smarter

程序已結束,退出程式碼0

從結果中可以看出來,group這個引數的意思就是給出多個匹配值,然後在字串中進行匹配,然後輸出對應的匹配結果,group(),這個()中的數字按從左往右的順序1,2....進行排列(注意只有用()括起來的匹配值才算),然後還要注意就是每個匹配值之間要能接上,比如www.cnblog.con,如果匹配結果寫成這樣就會報錯,因為匹配值之間少了個點,匹配的值就接不上:

"(www)(cnblogs)(com)"