繁体   English   中英

python中的电话号码正则表达式

[英]Phone Number regex in python

我刚刚开始将re模块用于python,并且正在制作一个可以从大文本文件中提取所有电话号码的正则表达式。 这是一个示例:Number: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)

但是我得到了一个奇怪的输出:

[('(0245)', '(0245)', '', '', '-', '3952568')]

有什么办法可以使它更有效,获得更好的结果或完全更改正则表达式?

PS:对不起,如果还不够清楚。 我想不出任何其他方式写这篇文章。

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

正则表达式有两个主要问题:-每个小部分都有括号,这就是为什么在输出中出现“空字符串”和“-”的原因。 您应该仅在要返回的部分周围加上括号(不是破折号和空格)。 如果删除这些,您将获得更明智的选择:

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

这个简化的版本将为您工作:

phoneregex=re.compile(r'\(?(\d{4})[\s\)\-]?(\d{7})')
phoneregex.findall('(0245)3952568  0245-1231241414  0245-1234567')
[('0245', '3952568'), ('0245', '1231241'), ('0245', '1234567')]

希望这可以帮助。

尝试多读一些有关正则表达式工作原理的信息,因为对于新手来说某些行为可能是不直观的: https : //developers.google.com/edu/python/regular-expressions#greedy-vs-non-greedy-optional

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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