python 2.7.11中的正则表达式

时间:2016-11-03 00:35:44

标签: python regex

我不确定为什么正则表达式 - \b((\+65[\s\-]*)?[3689]\d{3}[\s\-]*\d{4})\b不适用于+6565066859

1 个答案:

答案 0 :(得分:1)

由于在开头放置的单词边界,您的模式当前不起作用。请注意,单词边界将匹配单词字符和

  • 非单词字符
  • 字符串的开头
  • 字符串的结尾

在您的情况下,\b位于字符串的开头和+之间,它将匹配,因此您的第一个可选组将永远不会匹配。该模式的其余部分由一个8位数字组成(如果我们暂时忘记空格和连字符),但您尝试测试的数字由10个字符组成,因此两个字边界不能同时匹配。

我认为您可以将模式重写为((?:(\+65[\s\-]*)|\b)[3689]\d{3}[\s\-]*\d{4})\b,从而匹配+65或字边界。不确定您是否在模式中使用捕获组,因此我保持原样。