整理下幾個知識點, 方便自己後續查閱
python2/python3,正規表示式模組名都是re
.匹配任意除換行符"\n"外的字元(在dotall模式中也能匹配換行符)
\轉義字元,使後乙個字元改變原來的意思,如\s就是代表空白字元
*匹配多次,0-n次
+匹配多次,1-n次,和*的區別,+至少要匹配一次
?匹配0次或1次
^匹配字串開頭,在多行模式中匹配每一行的開頭
$匹配字串末尾,在多行模式中匹配每一行的末尾
|或,如a|b,表示匹配a或b
[...]
用來表示一組字元,也能給出乙個範圍,單獨列出,如[abcd]或[a-d],都是匹配'a' 或 'b' 或 'c' 或 'd'
[^...]
不在中的字元,如[^abc],匹配除了abc之外所有字元
(...)
匹配括號裡的乙個表示式,也表示乙個組
/裡面是乙個數字,表示匹配的次數,也可以寫乙個範圍,如,匹配1到3次
{}?非貪婪模式,只會匹配最小次數,如?,表示匹配一次
+?非貪婪模式,如help,<.+>,這樣表示式會匹配全部;<.+?>,這樣的表示式只會匹配第乙個符合條件的
*?非貪婪模式,例項參考 +?
??非貪婪模式,因為?本身是匹配0次或1次,所以??就是匹配0次
\d匹配數字,就是0-9十個數字
\d匹配非數字
\s匹配空白字元,最常用的就是\t\n\r還有space
\s匹配非空白字元
\w匹配字母數字字元,就是0-9十個數字和a-z 26個英文本母
\w匹配非字母數字字元
re.i
忽略大小寫
re.l
做本地化識別(locale-aware)匹配
re.m
多行匹配,影響 ^ 和 $
re.s
改變.的匹配模式,使.能匹配包括\n在內的所有字元
re.u
根據unicode字符集解析字元。這個標誌影響 \w, \w, \b, \b.
re.x
該標誌通過給予你更靈活的格式以便你將正規表示式寫得更易於理解。
(?)給匹配到的分組定義乙個別名,在使用groupdict()時,會返回乙個字典,key就是name,value就是匹配到的值。
如hello world這樣的乙個字串,用(?p\w+)\s(?p\w+)這個來匹配,
使用groupdict()得到的結果是
\number
引用標號為number的分組匹配到的字串,如1234這樣的乙個字串,(<.+?>)\d+\1這樣就能匹配到
適用於匹配兩頭一樣的字串
(?=name)
引用別名為name的分組匹配到的字串,這個用法和 \number 很類似,表示式參考(?p.+?)\d+(?p=td)
(?:...)
就是(...)的乙個不分組的版本
(?ilmsux)
其中ilmsux每個都代表乙個匹配模式,只能用在正規表示式的開頭,可同時使用多個;
這種模式,和re.i,re.l,re.m,re.s,re.u,re.x這種方式是等價的
(?#...)
#後面的內容將作為注釋被忽略
(?=...)
之後的字串內容需要匹配表示式才能匹配成功,不消耗字串內容,如a(?=\d),a後面的必須是數字才能匹配成功
(?!...)
之後的字串內容需要不匹配表示式才能匹配成功,不消耗字串內容
(?<=...)
之前的字串內容需要匹配表示式才能匹配成功,不消耗字串內容,如a(<=\d),a的前面是數字才能匹配成功
(?之前的字串內容需要不匹配表示式才能匹配成功,不消耗字串內容
還有比較特殊的,用的不多
(?(id/name)yes-pattern|no-pattern)
如果編號為id或別名為name的組匹配到字元,則需要匹配yes-pattern,否則需要匹配no-pattern,|no-pattern可省略
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...
Python正規表示式
學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...