1. 程式人生 > 實用技巧 >python 的正則表示式

python 的正則表示式

學習過程中看到了這個例子,查了一下r'(.*) are (.*?) .*'的解釋:

例項 2:

#!/usr/bin/python3

import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Nothing found!!")

以上例項執行結果如下:

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

r'(.*) are (.*?) .*'

首先,這是一個baidu字串,zhi前面的一個r表示字串為非轉義的原始字串,讓編譯器忽略反dao斜槓,也就是忽略轉義字元。但是這個字串裡沒有反斜槓,所以這個r可有可無。


(.*) 第一個匹配分組,.*代表匹配除換行符之外的所有字元

(.*?)第二個匹配分組,.*?後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字元

後面的一個.* 沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結果中。


matchObj.group() 等同於matchObj.group(0),表示匹配到的完整文字字元

matchObj.group(1) 得到第一組匹配結果,也就是(.*)匹配到的

matchObj.group(2) 得到第二組匹配結果,也就是(.*?)匹配到的


因為只有匹配結果中只有兩組,所以填3時會報錯。