2013-11-03 55 views
0

假設我想匹配正則表達式來查找文本中的域地址。 (包括子域如果有的話) 例如: 它應當匹配Python中的分組模式的替代正則表達式

abc.xyz. 
google. 
yahoo. 
mail.google. 

段:

pattern = '((\s*\w+.\s*)+)' 
matches = re.findall(pattern,line) 
for m in matches: 
.. 
.. 

內括號將給M [0],它我不需要,我會只需要m [1]。 什麼是內部括號的替代,以便我得到我的結果m [0]。

PS: 有額外的匹配組()是混亂,我想避免使用它們,除非我需要這些特定的值。

+0

你可以使用一個未命名的組,'((?:\ s * \ w +。\ s *)+)',這樣內部組不會被捕獲 –

+0

[Python urlparse - extract domain名稱無子域](http://stackoverflow.com/questions/14406300/python-urlparse-extract-domain-name-without-subdomain) – Ben

+0

@本,這是不重複的。我舉了一個例子,但問一個更廣泛的語法問題。 Hack.augusto的點數高於 – David

回答

4

您可以通過將?:在開始做一組非捕獲:

((?:\s*\w+.\s*)+) 

BTW,外parenthese是m[1]和內部括號是m[2] - 編號作品通過計算左括號,從開始1. m[0]指的是整個正則表達式。在你的情況下,它與m[1]相同,因爲你在一個組中有整個事情(爲什麼?)。

+0

感謝Barmar,這讓我們說我們有abcd,模式是'(ab)|(cd)'我會做什麼m [0] m [1 ] 這裏。它會不會是m [0] ab和m [1] cd – David

+0

在第一場比賽中,m [0]和m [1]爲ab,m [2]爲空。在第二場比賽中,'m [0]'和'm [2]'將會是'cd','m [1]'將是空的。 – Barmar

+0

你使用findall()來匹配嗎? – David