繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM