正則表達式的優勢是:一行勝千言
python中的正則表達式:怎麼在python中使用正則表達式?
簡潔:一組字符串的表達式
編譯:將符合正則表達式語法的字符串轉換成正則表達式特徵
正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
正則表達式是由字符和操作符組成。
經典正則表達式
正則表達式正則表達式含義^[A-Za-z]+$由26個字母組成的字符串^[A-Za-z0-9]+$由26個字母和數字組成的字符串^-?\d+$整數形式的字符串^[0-9]*[1-9][0-9]*$正整數形式的字符串[1-9]\d{5}中國境內郵政編碼,6位[\u4e00- \u9fa5]匹配中文字符\d{3}-\d{8}|\d{4)}-\d{7)}國內電話號碼,010-68913536(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])IP位址的精確表達式re庫主要功能函數
函數含義re.search()在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象re.match()從一個字符串的開始位置起匹配正則表達式,返回match對象re.findall()搜索字符串,以列表類型返回全部能匹配的子串re.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型re.finditer()搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象re.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串re.search()
在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
re.search(pattern, string, flags=0)re.search的(flags)常用標記
常用標記說明re.I re.IGNORECASE忽略正則表達式的大小寫,[A‐Z]能夠匹配小寫字符re.M re.MULTILINE正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始re.S re.DOTALL正則表達式中的.操作符能夠匹配所有字符,默認匹配除換行外的所有字符>>> import re
# 使用search方法,
>>> match = re.search(r'[1-9]\d{5}','BIT 100081')
# 判斷match與否,直接使用if語句判斷
>>> if match:
... print(match.group(0))
...
100081
>>> match.group()
'100081're.matchmatch()函數從字符串的起始位置開始匹配。如果匹配成功,則返回match對象;否則返回None。
re.match(pattern, string, flags=0)>>> import re
# match()函數從字符串的起始位置開始匹配
>>> match = re.match(r'[1-9]\d{5}','BIT 100081')
>>> match.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
# 上面的錯誤信息提示顯示匹配為空
# 結合match()函數從字符串的起始位置開始匹配,調整數據
# 將'BIT 100081'調整為'100081 BIT'
>>> match = re.match(r'[1-9]\d{5}','100081 BIT')
>>> if match:
... print(match.group(0))
...
100081re.findall()findall()函數用來搜索字符串,以列表類型返回全部能匹配的子串。
re.findall(pattern, string, flags=0)>>> import re
# 搜索字符串,以列表類型返回
>>> list = re.findall(r'[1-9]\d{5}','BIT100081 TSU100084')
# 將後面匹配的字符串列印
>>> list
['100081', '100084']re.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型。
re.split(pattern, string, maxsplit=0, flags=0)>>> import re
# split函數使用表達式去匹配字符串匹配的部分去掉,剩下的作為元素
>>> re.split(r'[1-9]\d{5}','BIT100081 TSU100084')
['BIT', ' TSU', '']
# 可見上結果,分割之後的是一個列表
# 增加maxsplit約束,使得maxsplit=1
>>> re.split(r'[1-9]\d{5}','BIT100081 TSU100084',maxsplit=1)
['BIT', ' TSU100084']finditer()搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
re.finditer(pattern, string, flags=0)>>> import re
# 使用for循環迭代的獲取match的匹配結果
>>> for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
... if m:
... print(m.group(0))
...
100081
100084sub()在一個字符串中替換所有匹配正則表達式的子串, 返回替換後的字符串.
re.sub(pattern, repl, string, count=0, flags=0)>>> import re
>>> re.sub(r'[1-9]\d{5}','替換','BIT100081 TSU100084')
'BIT替換 TSU替換'
>>> re.sub(r'[1-9]\d{5}','替換郵政編碼','BIT100081 TSU100084')
'BIT替換郵政編碼 TSU替換郵政編碼'compile()將正則表達式的字符串形式編譯成正則表達式對象語法:
regex = re.compile(pattern, flags=0)![]()
>>> import re
>>> match = re.search(r'[1-9]\d{5}','BIT100081')
>>> match.group()
'100081'
>>> match = re.search(r'[1-9]\d{5}','YUS100084')
>>> match.group()
'100084'
>>> regex = re.compile(r'[1-9]\d{5}')
>>> match = regex.search('BIT100081')
>>> match.group()
'100081'
>>> match = regex.search('TUS100084')
>>> match.group()
'100084'
re庫函數去掉正則表達式用法函數說明regex.search()在一個字符串中搜索匹配正則表達式的第一個位置, 返回match對象regex.match()從一個字符串的開始位置起匹配正則表達式,返回match對象regex.findall()搜索字符串,以列表類型返回全部能匹配的子串regex.split()將一個字符串按照正則表達式匹配結果進行分割,返回列表類型regex.fiditer()搜索字符串,返回-個匹配結果的迭代類型,每個迭代元素是match對象regex.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串貪婪匹配和最小匹配
>>> import re
>>> match = re.search(r'P.*N', 'P1N22N333N444N')
>>> match.group(0)
'P1N22N333N444N'
>>> match = re.search(r'P.*?N', 'P1N22N333N444N')
>>> match.group(0)
'P1N'操作符說明*?前一個字符0次或無限次擴展,最小匹配+?前一個字符1次或無限次擴展,最小匹配??前一個字符0次或1次擴展,最小匹配{m,n}?擴展前一個字符m至n次(含n),最小匹配