2016-01-20 63 views
1
import re 

phoneNumberRegex = re.compile(r'\d{3}-\d{3}-\d{4}') 
mo = phoneNumberRegex.search('My number is 415-55-4242.') 
print('Phone number found: ' + mo.group(0)) 

這是我使用的方法試圖找到一些錯誤的代碼都導致這個錯誤是什麼。集團()在正則表達式模塊的正確語法

Traceback (most recent call last): 
    File "<pyshell#6>", line 1, in <module> 
    print('Phone number found: ' + mo.group(0)) 
AttributeError: 'NoneType' object has no attribute 'group' 
+0

您搜索的結果是'None',換句話說:沒有發現任何東西。你必須處理這種情況,也許有一個'if'子句。 –

+0

它不會找到任何東西 - 你需要一個捕獲組:'(\ d {3} - \ d {3} - \ d {4})' –

+0

你是不是指'\ d {2,3}'? –

回答

3

MatchObject.group用法好的。

但是,415-55-4242\d{3}-\d{3}-\d{4}不匹配,因爲字符串的中間部分只包含2位數字。

>>> import re 
>>> re.search(r'\d{3}-\d{3}-\d{4}', 'My number is 415-55-4242.') # does not match => None 
>>> re.search(r'\d{3}-\d{2}-\d{4}', 'My number is 415-55-4242.') # matches => MatchObject 
<_sre.SRE_Match object; span=(13, 24), match='415-55-4242'> 

爲了防止錯誤,你需要警惕的最後一條語句:

phoneNumberRegex = re.compile(r'\d{3}-\d{3}-\d{4}') 
mo = phoneNumberRegex.search('My number is 415-55-4242.') 
if mo: 
    print('Phone number found: ' + mo.group(0)) 

UPDATE

如果你不想匹配12345-123-12345,你需要使用單詞邊界(\b):

r'\b\d{3}-\d{3}-\d{4}\b' 
+0

@AvinashRaj,我更新了包含它的答案。謝謝。 – falsetru

+0

感謝它的工作 –

1

它的工作原理 - 組是正確的方法。但是,您需要在您的正則表達式中使用捕獲組,並且正則表達式也有點錯誤。使用此代碼代替:

import re 

phoneNumberRegex = re.compile(r'(\d{3}-\d{2}-\d{4})') 
mo = phoneNumberRegex.search('My number is 415-55-4242.') 
print(mo.group(0)) 
+0

這也很完美。但是什麼是捕獲組。 –

+0

@ragemon實際上,這是不需要的,我的壞。你可以刪除正則表達式中的圓括號 –

相關問題