2017-08-30 35 views
0

我試圖使用正則表達式從雜亂的文本數據中提取URL。我曾經匹配[\w.]+[a-zA-Z]{2,4},其行爲如我所料:找到連續的字母數字和點,然後以2〜4個字母(如com/net/gov)結尾。這不完美,但足夠我的使用。 現在我想改進一下語法:我想查找所有字母數字後跟一個點,重複該模式多次,然後以2〜4個字母結束。這將排除諸如"abc....com"之類的內容。不過,這一次的結果真的讓我感到困惑:Python2重新匹配重複模式的行爲不如預期

test = 'www.1f23123.asda.com' 
re.findall(r'(\w+\.){1,}[a-zA-Z]{2,4}', test) 

,結果是['asda.'] 有人能向我解釋什麼不順心嗎?

回答

0

正在打印的拍攝組,試着加入:使之成爲非捕獲組,因此將打印整場比賽

test = 'www.1f23123.asda.com' 
match = re.findall(r'(?:\w+\.){1,}[a-zA-Z]{2,4}', test) 
print match 
+0

謝謝!問題解決了。 – yuchenhu

0

你的正則表達式使用重複捕獲組,你將需要捕捉重複組。所以只有最後一場比賽是在你的正則表達式中捕獲的。你將需要:

((?:\w+\.){1,})[a-zA-Z]{2,4} 

example

+0

謝謝!它解決了這個問題。我需要檢查一些非捕獲教程。 – yuchenhu

+0

閱讀:http://www.regular-expressions.info/captureall.html –