Python中的电话号码正则表达式(正则表达式)

时间:2010-08-14 19:04:42

标签: python regex phone-number

潜入python提供了一个关于为电话号码创建正则表达式的精彩小教程:http://diveintopython3.ep.io/regular-expressions.html#phonenumbers

最终版本看起来像:

phone_re = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$', re.VERBOSE)

对于我能提出的几乎所有示例,这都很好,但是我发现了一个相当大的失败,我似乎无法修复。

如果一组3位数字出现在电话号码之前,它可以正常工作。 IE: “500美元,请致电123-456-7891”

如果电话号码后面有一组3位数字,则会失败。 IE: “拨打123-456-7891以获得最高500的折扣”

有关修复的任何想法都适用于这两个示例吗?

2 个答案:

答案 0 :(得分:1)

(\d*)$要求您匹配的字符串以数字字符结尾($表示“行尾”)。如果您要匹配较大的字符串,请尝试删除$,其中电话号码可能不在该行的末尾。

答案 1 :(得分:0)

这是你的原创,有一些空格(使用re.VERBOSE,或删除空格):

(\d{3}) \D* (\d{3}) \D* (\d{4}) \D* (\d*)

\D*将匹配任何不是数字的内容,包括单词。也许你应该试试这个:

(\d{3}) \W* (\d{3}) \W* (\d{4}) \W* (\d*)

\W*匹配任何不是单词的内容。它将匹配(222) - 222 - 2222。但是,如果数字之间有字母,则不会匹配,如(222) x 222 - 2222中所示。匹配(\d*)的最后一部分似乎正在寻找扩展名。这些可以通过多种方式进行格式化 - 我建议您根据预期数据的外观将其删除或优化。而且,就像Amber说的那样,你应该放弃$