我想使用正则表达式从文本中捕获电话号码。
示例:
我有这个正则表达式可以很好地找到电话号码:
^((\(?\+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"
你能帮我吗?
如果您只想完整匹配:
(?:\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)
负向前瞻,断言右侧不是直接数字查看 正则表达式演示