【问题标题】:Python regex on phone numbers电话号码上的 Python 正则表达式
【发布时间】:2015-02-26 20:32:11
【问题描述】:

我正在使用以下正则表达式来匹配电话号码(仍在开发中,因此不全面):

\(?\+[\d _\-\.\)\(\+]{8,25}[\d]{1}

当我使用 regex101 或 regexpal.com 对其进行测试时,它同时匹配 +442032398869 和 +1 (888) 2572054。

但是,当我使用 Python 脚本运行它时,+442032398869 不匹配。有什么原因,我该如何解决?

额外问题:根据我的阅读,我应该在第一个字符集中进行尽可能多的转义。如果我删除 .或 + 例如?

编辑:

def get_numbers_in_text(html_string): 
    pattern = r'\(?\+[\d _\-\.\)\(\+]{8,25}[\d]{1}
    reg = re.compile(pattern,re.IGNORECASE) 
    numbers = reg.findall(text) 
    return numbers 

这两个数字在两个不同的 HTML 文件中,所以我调用了两次函数,每个 HTML 文件/数字调用一次。

【问题讨论】:

  • 请提供代码,如何在脚本中运行这个正则表达式?
  • 它对我来说很好用。 +442032398869 与您给定的模式匹配。
  • 它对我很有效:repl.it/cHr.
  • 你很可能使用了错误的 're' 方法。
  • 除非您只解析/验证来自一个国家/地区的电话号码,否则您可能需要查看libphonenumber,分别查看其 Python 端口 python-phonenumbers

标签: python regex phone-number


【解决方案1】:

您的正则表达式有效:

>>> s = 'blah +442032398869 blah +1 (888) 2572054blah'
>>> re.findall(r'\(?\+[\d _\-\.\)\(\+]{8,25}[\d]{1}', s)
['+442032398869', '+1 (888) 2572054']

您的代码表明您正在尝试匹配 html 文本中的数字。也许有标记分隔您尝试匹配的数字的部分。或者加号实际上是一个 unicode 全角加号 (U+FF0B)。或者其他类似的东西。

【讨论】:

  • 它在解释器中确实有效,但令人惊讶的是,这个数字并没有出现在我的数据库中。但是对于以前的正则表达式,从解释器运行时括号不会出现在输出字符串中,但在运行脚本时会出现在数据库中。在你问之前,是的,我同时使用 Python 3.4 :)
  • @bsuire:除了写入数据库之外,还可以在找到值时打印它们。然后你可以查看是否写入数据库失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2017-09-23
  • 2014-02-15
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多