python 正規表示式點號與 n 符號的問題

2022-04-13 11:06:16 字數 1167 閱讀 8416

遇到了乙個小蟲,特記錄之。

1.正規表示式及英文的處理如下:

>>> import re

>>> b='adfasdfasf<1safadsaf>23wfsa<13131>'

>>> pat = re.compile('<.*?>')

>>> pat.findall(b)

['<1safadsaf>', '<13131>']

2. 換成中文貌似就沒反應了

>>> msg=""

>>> pat.findall(msg)

仔細分析了下貌似因為其中的\n字元!

甚為不解,又try了一把:

>>> msg ='<\r>asdasf'

>>> pat.findall(msg)

['<\r>', '']

>>> msg='<\n>adf'

>>> pat.findall(msg)

['']

>>> msg='<\s>adaf'

>>> pat.findall(msg)

['<\\s>', '']

>>> msg='<\n>asdfasf'

>>> pat.findall(msg)

['']

確實點號無法匹配特殊字元'\n'!

在這裡找到了說明。

.匹配除 "\n" 之外的任何單個字元。要匹配包括 '\n' 在內的任何字元,請使用象 '[.\n]' 的模式。

3.[.\n]的尷尬情況

>>> pat= re.compile('<[.\n]*?>')

>>> pat.findall(msg)

['<\n>']

>>> msg

'<\n>asdfasf'

>>> msg='<\nasdfs>adaf'

>>> pat.findall(msg)

谷歌了一番,找到了答案,在這裡。即加入dotall選項。如下:

>>> pat = re.compile('<.*?>',re.dotall)

>>> pat.findall(msg)

['<\nasdfs>', '']

正規表示式 點號

上一章講到了各種字元組,與它相關的還有乙個特殊的元字元 點號.一般文件都說,點號可以匹配 任意字元 點號確實可以匹配 任意字元 常見的數字 字母 各種符號都可以匹配,如例2 10所示。例2 10 點號.的匹配 re.search r a none true re.search r 0 none tr...

正規表示式與python

在python中有乙個非常重要也非常好用的模組re,在import re後,就能夠在python中使用正規表示式,源於此次專案要用正規表示式對html 提取一定的字元,所以在這也就用些小例子來熟悉一下正規表示式 現在就用最簡單的例子 print re.findall r 執行後結果為 這個相對來說還...

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...