电话号码的正则表达式

问题描述 投票:0回答:1

我想使用正则表达式从文本中捕获电话号码。

示例:

我有这个正则表达式可以很好地找到电话号码:

^((\(?\+45\)?)?)(\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2})$

它很好地捕获了下面的所有数字。

但是我听不到号码前面的“tel.”、“tlf”、“mobil:”等。而且,如果最后一个数字后面出现另一个字母,则不再需要数字,但应该是。

未涵盖这些示例:

tel.: +45 09827374, +45 89895867, some kind of text... 
mobil: +45 20802020, +45 20802001,
tlf.: +45 5555 1212 
tlf: +4567890202Girrafe

如果有帮助,我找到了这个正则表达式:

'\btlf\b\D*([\d\s]+\d)'
可以提取数字和tlf,并且在找到由字母表示的新字符之前停止。

所以我尝试将它们结合起来,我得到了这个,但它不起作用:

\b(tlf|mobil|telephone|mobile|tel)\b\D*(^((\(?\+45\)?)?)(\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2})$)

预期输出:

  • 输入:
    "tel.: +45 09827374, +45 89895867, some kind of text..."
    --> 输出:
    "tel.: +45 09827374" and "+45 89895867"
  • 输入:
    "mobil: +45 20802020, +45 20802001,"
    --> 输出:
    "mobil: +45 20802020"
    "+45 20802001"
    "mobil: +45 20802020, +45 20802001"
    也可以
  • 输入:
    "tlf +45 5555 1212"
    --> 输出:
    "tlf +45 5555 1212"
  • 输入:
    "tlf: +4567890202Girrafe"
    --> 输出:
    "tlf: +4567890202"
  • 输入:
    "+4567890202"
    --> 输出:
    "+4567890202"

你能帮我吗?

python regex regex-group
1个回答
1
投票

如果您只想完整匹配:

(?:\b(?:tlf|mobile?|tel(?:ephone)?)[.:\s]+)?(?:\(\+45\)|\+45)?\s*\d{2}(?:\s?\d{2}){3}(?!\d)

模式匹配:

  • (?:
    非捕获组
    • \b
      防止部分单词匹配的单词边界
    • (?:tlf|mobile?|tel(?:ephone)?)
      匹配选项之一
    • [.:\s]+
      匹配 1+ 次出现的
      .
      :
      或空白字符
  • )?
    关闭捕获组并将其设为可选
  • (?:\(\+45\)|\+45)?
    可选择匹配
    +45
    (+45)
  • \s*\d{2}(?:\s?\d{2}){3}
    匹配 3 次 2 位数字,中间有一个可选的空格字符
  • (?!\d)
    负向前瞻,断言右侧不是直接数字

查看 正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.