re 模組讓 Python 語言擁有全部的正規表示式功能。
compile 函數根據一個模式字串和可選的標誌參數產生一個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。
re.match(pattern, string, flags=0) # 匹配成功返回一个匹配的对象,否则返回none
1 import re2 print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配 (0, 3)3 print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配 None
1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) .*', line, re.M|re.I) # 结果也一样 5 6 if matchObj: 7 print("matchObj.group()", matchObj.group()) # cats are smarter than dogs 8 print("matchObj.group(1)", matchObj.group(1)) # cats 9 print("matchObj.group(2)", matchObj.group(2)) # smarter10 else:11 print("No match!!")
1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) (.*) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) (.*) .*', line, re.M|re.I) #这个结果也一样 5 6 if matchObj: 7 print("matchObj.group()", matchObj.group()) # cats are smarter than dogs 8 print("matchObj.group(1)", matchObj.group(1)) # cats 9 print("matchObj.group(2)", matchObj.group(2)) # smarter10 print("matchObj.group(3)", matchObj.group(3)) # than11 else:12 print("No match!!")
使用group(num) 或 groups() 匹配物件函數來取得匹配表達式。
groups():傳回一個包含所有小組字串的元組,從 1 到 所含的小組號碼。
re.search 掃描整個字串並傳回第一個成功的匹配。
print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配 (0, 3)print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配 (11, 14)
1 import re2 line = "Cats are smarter than dogs";3 searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)4 if searchObj:5 print("searchObj.group() : ", searchObj.group()) # Cats are smarter than dogs 6 print("searchObj.group(1) : ", searchObj.group(1)) # Cats7 print("searchObj.group(2) : ", searchObj.group(2)) # smarter8 else:9 print("Nothing found!!")
1 line = "Cats are smarter than dogs" 2 matchObj = re.match(r'dogs', line, re.M | re.I) 3 if matchObj: 4 print("match --> matchObj.group() : ", matchObj.group()) 5 else: 6 print("No match!!") 7 8 matchObj = re.search(r'dogs', line, re.M | re.I) 9 if matchObj:10 print("search --> matchObj.group() : ", matchObj.group())11 else:12 print("No match!!")13 '''14 No match!!15 search --> matchObj.group() : dogs16 '''
re.match只匹配字串的開始,如果字串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字串,直到找到一個匹配。
1 re.search(pattern, string, flags=0)2 re.sub(pattern, repl, string, count=0, flags=0)
re 模組提供了re.sub用於替換字串中的匹配項。
參數:
pattern : 正規中的模式字串。
repl : 被替換的字串,也可為一個函數。
string : 要被尋找已取代的原始字串。
count : 模式匹配後替換的最大次數,預設 0 表示替換所有的匹配。
1 phone = "2004-959-559 # 国外电话号码"2 # 删除字符串中的Python注释3 num = re.sub(r'#.*$', "", phone)4 print("电话号码是:", num) # 电话号码是: 2004-959-559 5 6 # 删除非数字(-)的字符串7 num = re.sub(r'\D', "", phone)8 print("电话号码是:", num) # 电话号码是: 2004959559
repl參數是一個函數
1 # 将匹配的数字乘于22 def double(matched):3 value = int(matched.group('value'))4 return str(value * 2)5 6 s = 'A23G4HFD567'7 print(re.sub('(?P<value>\d+)', double, s))
re.I | 使匹配對大小寫不敏感化 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使匹配對大小寫不敏感化 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
多行匹配,影響^ 和$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使. 匹配包括換行在內的所有字符 | 字符對||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
re.X | 該標誌透過給予你更靈活的格式以便你將正則表達式寫得更易於理解。||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
^ | 符合字串的開頭 |
$ | 符合字串的結尾。 |
. | 匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。 |
[...] | 用來表示一組字元,單獨列出:[amk] 匹配'a','m'或'k' |
[^...] | 不在[]中的字元:[^abc] 符合除了a,b,c之外的字元。 |
re* | 符合0個或多個的表達式。 |
re+ | 符合1個或多個的表達式。 |
re? | 配對0個或1個由前面的正規表示式定義的片段,非貪婪方式 |
re{ n} | n個前面表達式。|
匹配n 到m 次由前面的正規表示式定義的片段,貪婪方式 | |
G符合括號內的表達式,也表示一個群組 | |
正規表示式包含三種可選標誌:i, m, 或x 。只影響括號中的區域。 | |
正規表示式關閉 i, m, 或 x 可選標誌。只影響括號中的區域。 | |
類似(...), 但不表示一個組 | |
在括號中使用i, m,x 可選標誌 | (?-imx: re) |
(?#...) | |
(?#...) | 我 |
前向肯定界定符。如果所含正規表示式,以 ... 表示,在目前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩餘部分還要嘗試界定符的右邊。 | |
前向否定界定符。與肯定界定符相反;當所含表達式不能在字串當前位置匹配時成功 | |
匹配的獨立模式,省去回溯。 | |
匹配字母數字及底線 | |
匹配非字母數字及底線 | |
匹配任意非空字元 | |
匹配任意數字,等價於[0-9]. | |
Z | |
z | |
G | |
b | |
B | |
n, t, 等. | |
1...9 | |
10 | |
1. 字符匹配 | python匹配"python". |
rub [ye] | |
[aeiou] | |
[0-9] |
[0-9]
類似[0123456789][a-z] | 匹配任何小寫字母 | ||||||||||||||
[A-Z] | -任何大寫字母 | 數字||||||||||||||
[^aeiou] | 除了aeiou字母以外的所有字符 | ||||||||||||||
[^0-9] | 匹配除了數字外的字符 | ||||||||||||||
3. 特殊字元類
r表示字串為非轉義的原始字串,讓編譯器忽略反斜杠,即忽略轉義字元。 (.*)第一個符合分組, * 代表符合除換行符之外的所有字元。 (.*?)第二個匹配分組,*? 後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字符 最後一個.* 沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入配對結果。 |
以上是python正規表示式怎麼學習?的詳細內容。更多資訊請關注PHP中文網其他相關文章!