2017-04-04 140 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

另外请注意,没有必要逃避一个.字符类中,它已经被解析为[.]字面点。并且无需使用一个懒惰的??量词,它不会在这里做的意义和贪婪的版本,?,将工作得很好,并期待“清洁工”。

相关问题