來自菜鳥教程-python正則表達式下大佬的評論:
例題:
#!/usr/bin/python
import re
line = “Cats are smarter than dogs”
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!!”
正則表達式:
r’(.) are (.?) .*’
解析:
首先,這是一個字符串,前面的一個 r 表示字符串爲非轉義的原始字符串,讓編譯器忽略反斜槓,也就是忽略轉義字符。但是這個字符串裏沒有反斜槓,所以這個 r 可有可無。
(.) 第一個匹配分組,. 代表匹配除換行符之外的所有字符。
(.?) 第二個匹配分組,.? 後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字符
後面的一個 .* 沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結果中。
matchObj.group() 等同於 matchObj.group(0),表示匹配到的完整文本字符
matchObj.group(1) 得到第一組匹配結果,也就是(.*)匹配到的
matchObj.group(2) 得到第二組匹配結果,也就是(.*?)匹配到的
因爲只有匹配結果中只有兩組,所以如果填 3 時會報錯。