优化德国手机号码的正则表达式

PPa*_*ker 3 python regex match

我有一个正则表达式,可以从网站中提取德国手机号码:

[^\d]((\+49|0049|0)1[567]\d{1,2}([ \-/]*\d){7})(?!\d)

Run Code Online (Sandbox Code Playgroud)

正如您在演示中看到的,它运行得很好。唯一尚未匹配的模式是:

+49 915175461907
Run Code Online (Sandbox Code Playgroud)

请参阅链接演示中的更多示例。问题是后面的空格+49

我需要如何更改当前的正则表达式模式才能匹配这些类型的模式?

anu*_*ava 5

更好的正则表达式是:

(?<!\d)(?:\+49|0049|0) *[19][1567]\d{1,2}(?:[ /-]*\d){7,8}(?!\d)
Run Code Online (Sandbox Code Playgroud)

更新了正则表达式演示

变化:

  • (?<!\d):确保前一个字符不是数字
  • [19][1567]:匹配19后跟一位[1567]数字
  • {7,8}:匹配给定结构的 7 或 8 次重复
  • 最好在字符类的第一个或最后一个位置保留未转义的连字符
  • 使用非捕获组避免捕获不需要的文本