2017-04-04 136 views
0

我有一根弦爲純文本,並希望提取從任何格式的電話號碼。 這裏是我的正則表達式:正則表達式結束

r = re.compile(r"(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)[-\s*]\d{3}[-\.\s]??\d{4})") 

它提取以下匹配正確:

617.933.6444 
(880)-567-4565 
(880) 567-4565 
222-333-8888 
555 666 4444 
9999999999 

但我怎麼能避免讓7986815059當我在文本798681505951

如何使我的正則表達式的結束? (它不應該包含後的字母和數字之前,確切的數字計數必須是10)

!!!! 決定

如果有人需要在字符串中查找美國電話號碼,請使用上次WiktorStribiżew評論中的鏈接。

+1

加上''^在末開始和'$'。 –

+0

我有一個洞字符串作爲純文本。添加''^在末開始和'$'不會幫助 – Headmaster

+0

我真不明白你怎麼做的輸入。 https://regex101.com/r/QzRJIK/3 – Headmaster

回答

2

您需要使用單詞邊界,而是將它們放置在你的模式並不明顯。這是由於第二個替代與非字字符,\(開始的事實。因此,第一\b必須在第一替代方案的開始加入,並在圖案非常末尾加上一個:

r'(\b\d{3}[-.\s]?\d{3}[-.\s]?\d{4}|\(\d{3}\)[-\s*]\d{3}[-.\s]?\d{4})\b' 
    ^^                ^^ 

regex demo

您可能還需要一個不字字符或字符串的開始在(之前。然後在第二個選擇開始添加\B

r'(\b\d{3}[-.\s]?\d{3}[-.\s]?\d{4}|\B\(\d{3}\)[-\s*]\d{3}[-.\s]?\d{4})\b' 
            ^^ 

another demo

另外請注意,沒有必要逃避一個.字符類中,它已經被解析爲[.]字面點。並且無需使用一個懶惰的??量詞,它不會在這裏做的意義和貪婪的版本,?,將工作得很好,並期待「清潔工」。

相關問題