【问题标题】:Phone Number regex in pythonpython中的电话号码正则表达式
【发布时间】:2019-02-27 05:09:09
【问题描述】:

我刚刚开始使用 python 的 re 模块,并且正在制作一个可以从大文本文件中取出所有电话号码的正则表达式。 这是一个例子: 号码: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:抱歉,如果这不够清楚。我想不出任何其他的写法。

【问题讨论】:

标签: python regex


【解决方案1】:

您的正则表达式有 2 个主要问题: - 每个小部分都有括号,这就是为什么在输出中得到 '' 空字符串和 '-' 的原因。您应该只在要返回的部分周围加上括号(破折号和空格不是那样)。如果你删除这些,你会得到更明智的东西:

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

【讨论】:

  • 对不起,迟到的评论。这很好用,但是你能告诉我第一个是什么吗?有吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2017-09-23
    • 2014-02-15
    • 2020-01-18
    • 1970-01-01
    相关资源
    最近更新 更多