1.基礎
匹配前乙個字元m次
[abc] a或b或c
* 匹配前乙個字元0到無限次
+ 匹配前乙個字元1到無限次
? 匹配前乙個字元0到1次
{a,b}匹配前乙個字元或子表示式至少m次至多n次
匹配前乙個字元或者子表示式至少n次
. 代表任意乙個字元,包括它本身
^ 表示取反
多加個?號,會把模式為惰性匹配
簡單來說,就是你要匹配的字元是xx,但必須滿足形式是axxb這樣的字串,那麼你就可以這樣寫正規表示式
p = r"(?<=a)xx(?=b)"
2.回溯引用
不同於前面的向前向後查詢,這一條有時候你未必繞的過去。在有些情況下,你還必須得用到回溯引用,所以你如果想擁有在實際應用中使用正規表示式,回溯引用是你應該了解和掌握的。
我們還是從最開始的例子來說。
你原本要匹配之間的內容,
現在你知道html有多級標題,你想把每一級的標題內容都提取出來。你也許會這樣寫:
p = r".*?"
這樣一來,你就可以將html頁面內所有的標題內容全部匹配出來。即到的內容都可以被提取出來。
但是我們之前說過,寫正規表示式困難的不是匹配到想要的內容,而是盡可能的不匹配到不想要的內容。在這個例子中,很有可能你就會被下面這樣的用例玩壞。
比方說結尾就能看出效果
看到\1了嗎?原本那個位置應該是[1-6],但是我們寫的是\1,
我們之前說過,轉義符\幹的活就是把特殊的字元轉成一般的字元,把一般的字元轉成特殊字元。
普普通通的數字1被轉移成什麼了呢?在這裡1表示第乙個子表示式,也就是說,它是動態的,是隨著前面第乙個子表示式的匹配到的東西而變化的。比方說前面的子表示式內是[1-6],在實際字串中找到了1,那麼後面的\1就是1,如果前面的子表示式在實際字串中找到了2,那麼後面的\1就是2。
類似的,\2,\3,…就代表第二個第三個子表示式。
所以回溯引用是正規表示式內的乙個「動態」的正規表示式,讓你根據實際的情況變化進行匹配。
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...