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

2024-09-26 22:52:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始使用python的re模块,并正在制作一个regex,它可以从一个大的文本文件中取出所有电话号码。 下面是一个例子: 编号:02453952568,0245-3952568,(0245)3952568,0245 3952568,3952568。我想要能探测到所有这些的东西。 以下是我目前为止的代码:

phoneregex=re.compile(r'((\(\d{4}\))|(d{4}))?(\s)?(-)?(\d{7})')
tpn=phoneregex.findall('(0245)3952568')
print (mzz)

但我得到了一个wierd输出:

^{pr2}$

有什么方法可以让它更高效,得到更好的结果或者完全改变正则表达式?在

附言:抱歉,如果这不够清楚。我想不出其他的写作方法了。在


Tags: 模块代码re电话号码编号例子regexprint
2条回答

您需要将正则表达式更改为^...$,其中...是当前的正则表达式。这样电话号码就不会重叠了。在

正则表达式有两个主要问题: -每个小部分都有圆括号,这就是为什么在输出中得到“”空字符串和'-'。你应该只在你想返回的部分加上括号(虚线和空格不是这样)。如果你去掉这些,你会得到更合理的结果:

phoneregex=re.compile(r'((\(\d{4}\))|(d{4}))?\s?-?(\d{7})')
phoneregex.findall('(0245)3952568')
> [('(0245)', '(0245)', '', '3952568')]
  • 第二个问题是您在正则表达式中有“|”或实际上允许两者都匹配字符串。这里有第一个匹配的左手re'(0245)',然后右手边匹配代码和7位数字,所以您得到代码两次。在

此简化版本适用于您:

^{pr2}$

希望这有帮助。在

请多读一点regexp是如何工作的,因为有些行为对于初学者来说可能是不直观的:https://developers.google.com/edu/python/regular-expressions#greedy-vs-non-greedy-optional

相关问题 更多 >

    热门问题