標籤:
Regex是非正常重要的知識點,他在許許多多的地方都有應用,既是重點,也是痛點。
使用Regex需要調用re模組
re模組常用的方法:
1、re.serach()
re.search 函數會在字串內尋找模式比對,只到找到第一個匹配然後返回,如果字串沒有匹配,則返回None。
2、re.match()
re.match 嘗試從字串的開始匹配一個模式,也等於說是匹配第一個單詞
3、re.findall
re.findall 在目標尋找符合模式的匹配項
4、re.complie()
re.complie 把Regex編譯成一個對象,這樣在re.findall中就可以直接使用了,而不用使用複雜的規則
5、re.split()
re.split 負責把字元分割
6、re.sub()
re.sub 用於替換字串的匹配項
>>> help(re.sub)sub(pattern, repl, string, count=0)
正則匹配模式
^ |
匹配字串的開頭 |
$ |
匹配字串的末尾。 |
. |
匹配任一字元,除了分行符號,當re.DOTALL標記被指定時,則可以匹配包括分行符號的任一字元。 |
[...] |
用來表示一組字元,單獨列出:[amk] 匹配 ‘a‘,‘m‘或‘k‘ |
[^...] |
不在[]中的字元:[^abc] 匹配除了a,b,c之外的字元。 |
re* |
匹配0個或多個的運算式。 |
re+ |
匹配1個或多個的運算式。 |
re? |
匹配0個或1個由前面的Regex定義的片段,貪婪方式 |
re{ n} |
|
re{ n,} |
精確匹配n個前面運算式。 |
re{ n, m} |
匹配 n 到 m 次由前面的Regex定義的片段,貪婪方式 |
a| b |
匹配a或b |
(re) |
G匹配括弧內的運算式,也表示一個組 |
(?imx) |
Regex包含三種可選標誌:i, m, 或 x 。隻影響括弧中的地區。 |
(?-imx) |
Regex關閉 i, m, 或 x 可選標誌。隻影響括弧中的地區。 |
(?: re) |
類似 (...), 但是不表示一個組 |
(?imx: re) |
在括弧中使用i, m, 或 x 可選標誌 |
(?-imx: re) |
在括弧中不使用i, m, 或 x 可選標誌 |
(?#...) |
注釋. |
(?= re) |
前向肯定界定符。如果所含Regex,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含運算式已經嘗試,匹配引擎根本沒有提高;模式的剩餘部分還要嘗試界定符的右邊。 |
(?! re) |
前向否定界定符。與肯定界定符相反;當所含運算式不能在字串當前位置匹配時成功 |
(?> re) |
匹配的獨立模式,省去回溯。 |
\w |
匹配字母數字 |
\W |
匹配非字母數字 |
\s |
匹配任意空白字元,等價於 [\t\n\r\f]. |
\S |
匹配任意非Null 字元 |
\d |
匹配任一數字,等價於 [0-9]. |
\D |
匹配任意非數字 |
\A |
匹配字串開始 |
\Z |
匹配字串結束,如果是存在換行,只匹配到換行前的結束字串。c |
\z |
匹配字串結束 |
\G |
匹配最後匹配完成的位置。 |
\b |
匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。 |
\B |
匹配非單詞邊界。‘er\B‘ 能匹配 "verb" 中的 ‘er‘,但不能匹配 "never" 中的 ‘er‘。 |
\n, \t, 等. |
匹配一個分行符號。匹配一個定位字元。等 |
\1...\9 |
比賽第n個分組的子運算式。 |
\10 |
匹配第n個分組的子運算式,如果它經匹配。否則指的是八進位字元碼的運算式。 |
太多了懶得手打,直接摘自http://www.w3cschool.cc/python/python-reg-expressions.html
貪婪模式:
表示儘可能匹配多的匹配要匹配的內容,可用"?"來取消貪婪匹配,因為?表示匹配前邊字元0次或一次
正則中的轉義:
可使用"\",不過常用"r"
PythonRegex