[英]Phone Number Regular Expression (Regex) in Python
Dive into 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 的折扣”
关于对这两个示例都适用的修复程序的任何想法?
(\\d*)$
要求您匹配的字符串以数字字符结尾( $
表示“行尾”)。 如果您要匹配电话号码可能不在行尾的较大字符串,请尝试删除$
。
这是您的原件,带有一些空格(使用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 说的,你应该放弃$
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.