今天練習re模組時候出現了乙個很奇怪的問題,同樣的正規表示式用re.search()與用re.compile().findall()匹配出來的結果不一致。
很是奇怪,故此記錄一下,防止以後碰到類似情況解決不了。
1#!/usr/bin/env python32#
author:taoke
3import
re4 str = '
'5 pat = '
[a-za-z0-9]+://[a-za-z0-9]+\.[a-za-z0-9]+\.(com|cn)
'6 p =re.search(pat,str)
7print
(p)8 p =re.compile(pat).findall(str)
9print(len(p) , p)
執行結果:
1 d:\code\webcrawler\venv\scripts\python.exe d:/code/webcrawler/retest/retest1.py2<_sre.sre_match object; span=(40, 60), match='
'>
3 1 ['
com']4
5 process finished with exit code 0
兩次結果並不一致。隨後到處查資料問人,後來發現一篇部落格:python re 模組 findall 函式用法簡述
介紹了re.re.compile().findall()的用法。
>>> importre
>>> s = "
adfad asdfasdf asdfas asdfawef asd adsfas
"
>>> reobj1 = re.compile('
((\w+)\s+\w+)
')
>>>reobj1.findall(s) [('
adfad asdfasdf
', '
adfad
'), ('
asdfas asdfawef
', '
asdfas
'), ('
asd adsfas
', '
asd'
)]
>>> reobj2 = re.compile('
(\w+)\s+\w+
')
>>>reobj2.findall(s) ['
adfad
', '
asdfas
', '
asd'
]
>>> reobj3 = re.compile('
\w+\s+\w+
')
>>>reobj3.findall(s) ['
adfad asdfasdf
', '
asdfas asdfawef
', '
asd adsfas
']
按以上**例子講解:
findall函式返回的總是正規表示式在字串中所有匹配結果的列表,此處主要討論列表中「結果」的展現方式,即findall中返回列表中每個元素包含的資訊。
@1.當給出的正規表示式中帶有多個括號時,列表的元素為多個字串組成的tuple,tuple中字串個數與括號對數相同,字串內容與每個括號內的正規表示式相對應,並且排放順序是按括號出現的順序。
@2.當給出的正規表示式中帶有乙個括號時,列表的元素為字串,此字串的內容與括號中的正規表示式相對應(不是整個正規表示式的匹配內容)。
@3.當給出的正規表示式中不帶括號時,列表的元素為字串,此字串為整個正規表示式匹配的內容。
所以將我上面的正規表示式該後如下:
1#!/usr/bin/env python32#
author:taoke
3import
re4 str = '
'5 pat = '
[a-za-z0-9]+://[a-za-z0-9]+\.[a-za-z0-9]+\.com|cn
'6 p =re.search(pat,str)
7print
(p)8 p =re.compile(pat).findall(str)
9print(len(p) , p)
執行結果如下:
1 d:\code\webcrawler\venv\scripts\python.exe d:/code/webcrawler/retest/retest1.py2<_sre.sre_match object; span=(40, 60), match='
'>
3 1 ['
']45 process finished with exit code 0
兩次匹配的結果一致了,哈哈。
Python re 正則模組
有些字元比較特殊,它們和自身並不匹配,而是會表明應和一些特殊的東西匹配,或者它們會影響到 re 其它部分的重複次數,它們叫元字元。其中 m 和 n 是十進位制整數。該限定符的意思是至少有 m 個重複,至多到 n 個重複。舉個例子,a b 將匹配 a b a b 和 a b 它不能匹配 ab 因為沒有...
python re 模組小結
前言 本人環境windows 7 64 位,python2.7 re是什麼 regular expression縮寫,意為正規表示式,是 python 的眾多模組之一 re用途 從文字中有選擇的批量抽取想要的文字碎片 re型別 分為dfa 確定的有窮狀態自動機 和 nfa 非確定的有窮狀態自動機 r...
Python re正則模組
對於比較複雜的字串處理任務,需要依靠正規表示式。首先需要匯入 re 模組 import re常用的元字元 符號含義 匹配除 n 和 r 之外的任何單個字元。匹配字串開始位置 匹配字串結束位置 前面的元素重複0次,1次或多次 前面的元素重複0次或1次 前面的元素重複1次或多次 前面的元素出現了n次 前...