Python正規表示式

2021-08-01 22:36:09 字數 1463 閱讀 9601

1、首先說一種最簡單的正規表示式,它沒有特殊的符號,只有基本的字母或數字。它滿足的匹配規則就是完全匹配。

import re

text = "hi, i am shirley hilton. i am his wife."

m = re.findall(r"hi", text)

if m:

print m

else:

print "not match"

以上**為擷取"hi, i am shirley hilton. i am his wife."中的hi字串,擷取預設有大小寫之分。

2、如果我們只想找到「hi」這個單詞,而不把包含它的單詞也算在內,那就可以使用「\bhi\b」這個正規表示式。

比如1中的字串,如果設定\bhi,那就會匹配到乙個hi。

3、最後再說一下這個符號。在正規表示式中,表示滿足括號中任一字元。比如「[hi]」,它就不是匹配「hi」了,而是匹配「h」或者「i」。比如上述字串設定規則[hh]i,那就既能匹配hi也能匹配hi了。

4、r"hi"這裡字串前面加了r,是raw的意思,它表示對字串不進行轉義。為什麼要加這個?看看print "\bhi"和r"\bhi"的區別。

>>> print "\bhi"

hi>>> print r"\bhi"

\bhi

可以看到,不加r的話,\b就沒有了。因為python的字串碰到「\」就會轉義它後面的字元。如果你想在字串裡打「\」,則必須要打「\\」。

>>> print "\\bhi"

\bhi

這樣的話,我們的正規表示式裡就會多出很多「\」,讓本來就已經複雜的字串混亂得像五仁月餅一般。但加上了「r」,就表示不要去轉義字串中的任何字元,保持它的原樣。

5、「.」在正規表示式中表示除換行符以外的任意字元。在1中的字串:

hi, i am shirley hilton. i am his wife.

如果我們用「i.」去匹配,就會得到

['i,', 'ir', 'il', 'is', 'if']

也可以直接用「.」去匹配,看看會得到什麼。

與「.」類似的乙個符號是「\s」,它表示的是不是空白符的任意字元。注意是大寫字元s。

6、在很多搜尋中,會用「?」表示任意乙個字元,「*」表示任意數量連續字元,這種被稱為萬用字元。但在正規表示式中,任意字元是用「.」表示,而「*」則不是表示字元,而是表示數量:它表示前面的字元可以重複任意多次(包括0次),只要滿足這樣的條件,都會被表示式匹配上。

結合前面的「.*」,用「i.*e」去匹配會得到:['i am shirley hilton. i am his wife'];而不是:['i am shirle', 'i am his wife'];

這是因為「*」在匹配時,會匹配盡可能長的結果。如果你想讓他匹配到最短的就停止,需要用「.*?」。如「i.*?e」,就會得到第二種結果。這種匹配方式被稱為懶惰匹配,而原本盡可能長的方式被稱為貪婪匹配。

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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...