用圓括號將所有選擇項括起來,相鄰的選擇項之間用|分隔。但用圓括號會有乙個***,使相關的匹配會被快取,此時可用?:放在第乙個選項前來消除這種***。
其中?:
是非捕獲元之一,還有兩個非捕獲元是?=
和?!
,這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括號內的正規表示式模式的位置來匹配搜尋字串,後者為負向預查,在任何開始不匹配該正規表示式模式的位置來匹配搜尋字串。
去優先順序
# ['oldboy'] 這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可
(r'(.*?(省|自治區|特別行政區|市))'
)pattern_1 = re.
compile
(r'(.*?(?:省|自治區|特別行政區|市))'
)s =
'江蘇省蘇州市虎丘區馬澗路靠近白馬澗花園'
result_0 = re.search(pattern_0, s)
.groups(
)result_1 = re.search(pattern_1, s)
.groups(
)in[
242]
: result_0
out[
242]:(
'江蘇省'
,'省'
)in[
243]
: result_1
out[
243]:(
'江蘇省'
,)result_0中的分組結果中有兩個元素,而第二個元素『省』不是我們需要的,所以在pattern_1的括號中增加」?:」, 也就是(?:省|自治區|特別行政區|市), 這樣,括號中的內容就不會**獲。
對乙個正規表示式模式或部分模式兩邊新增圓括號將導致相關匹配儲存到乙個臨時緩衝區中,所捕獲的每個子匹配都按照在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式。每個緩衝區都可以使用 \n 訪問,其中 n 為乙個標識特定緩衝區的一位或兩位十進位制數。
可以使用非捕獲元字元 ?:、?= 或 ?! 來重寫捕獲,忽略對相關匹配的儲存。
正規表示式中,放在圓括號「()」中的表示是乙個組。然後你可以對整個組使用一些正則操作,例如重複操作符。
要注意的是,只有圓括號」()」才能用於形成組。」「用於定義字符集。」{}」用於定義重複操作。
當用」()」定義了乙個正規表示式組後,正則引擎則會把被匹配的組按照順序編號,存入快取。這樣我們想在後面對已經匹配過的內容進行引用時,就可以用」\數字」的方式或者是通過命名分組進行」(?p=name)「進行引用。\1表示引用第乙個分組,\2引用第二個分組,以此類推,\n引用第n個組。而\0則引用整個被匹配的正規表示式本身。這些引用都必須是在正規表示式中才有效,用於匹配一些重複的字串。
#通過命名分組進行後向引用
>>
> re.search(r'(?pgo)\s+(?p=name)\s+(?p=name)'
,'go go go'
).group(
'name'
)'go'
#通過預設分組編號進行後向引用
>>
> re.search(r'(go)\s+\1\s+\1'
,'go go go'
).group(
)'go go go'
Python 正規表示式學習(二)正規表示式語法
一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...
python正規表示式學習
今天學習了python中有關正規表示式的知識。關於正規表示式的語法,不作過多解釋,網上有許多學習的資料。這裡主要介紹python中常用的正 則表示式處理函式。re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import re text jgood is a handso...
python正規表示式學習
python 中的re 模組 正規表示式 就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊 學習原則 夠用就行,需要的時候在深入 現總結如下 正規表示式中特殊的符號 表任意字元 表string起始 表string 結束 跟在字元後面表示,0個 多個,1個 多個,0個或者1個 符合條件的情況下...