正文中间的正则表达式不匹配

时间:2018-03-09 22:11:05

标签: regex python-3.x regex-group

我有正则表达式在文本中找到网址:

^(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\.[a-zA-Z]{2,11}?$

但是当它被文本包围时失败:

enter image description here

https://regex101.com/r/0vZy6h/1

我似乎无法理解为什么它不起作用。

2 个答案:

答案 0 :(得分:1)

模式不起作用的可能原因:

  • ^$使其与整个字符串相匹配
  • (?!:\/\/)是一个否定的预测,如果在当前位置的右侧有://子字符串,则匹配失败。但[a-zA-Z0-9-_]+表示不能有任何://,因此,如果 left 存在://,则您很可能希望失败。当前位置,即您想要负面的背后隐藏(?<!:\/\/)
  • [a-zA-Z]{2,11}? - 仅在$被删除后才会匹配2个字符,因为{2,11}? lazy 量词,并且此类模式位于结尾处模式它总是匹配最小的char数量,这里,2。

使用

(?<!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\.[a-zA-Z]{2,11}

请参阅regex demo。如果您需要将子字符串作为整个单词匹配,请添加\b字边界。

请注意,在Python正则表达式中无需转义/,您可以将(?<!:\/\/)替换为(?<!://)

答案 1 :(得分:0)

空格不匹配。尝试在字符集中添加空格,检查前导或尾随文本。