【问题标题】:Regex does not find phone number inside text正则表达式在文本中找不到电话号码
【发布时间】:2018-12-02 03:21:19
【问题描述】:

我想使用正则表达式在文本中查找电话号码。我的电话号码公式是:

(?:(?:\+?\d*\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{3})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

在一行中没有任何其他文本时,正在查找数字。但是,当它位于某些文本的中间时,则找不到它。我该如何解决?

这是示例的链接: regexr.com/3rf0l

【问题讨论】:

  • 不错的开始,但有一些限制。如果 +1 实际上是国家/地区代码,则 10 位电话号码会从第 10 位下降。此外,尽管按照下面的建议删除 $ 将回答您的问题,但您需要处理行以数字结尾并以数字开头的情况。

标签: regex


【解决方案1】:

这是因为您的正则表达式以 $ 结尾,这是行/文档末尾的锚点(取决于您的多行设置)。

例如,在字符串1a2b 中,正则表达式[a-z]$ 将匹配b 但不匹配a,因为它不在字符串的末尾,而[a-z] 将匹配两者。

删除它,它会工作:

(?:(?:\+?\d*\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{3})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?

Demo

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2014-02-15
    • 2017-04-09
    • 2016-02-02
    • 2011-12-14
    • 2013-05-26
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多