Python正则表达式匹配它不应该的字符串

时间:2014-10-17 19:34:34

标签: python regex

我完全迷失了这个正则表达式如何匹配python中的这个字符串。有人能理解它吗?

import re
regex = "^PHP/5.\\{3|2\\}.\\{1|2|3|4|5|6|7|8|9|0\\}\\{1|2|3|4|5|6|7|8|9|0\\}$"
ua = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'
re.compile(regex).search(ua)

正则表达式以PHP开头,而字符串则不是。难道不能简单地取消比赛的资格吗?

2 个答案:

答案 0 :(得分:5)

您需要为替换进行分组(最好是非捕获):

PHP/5.\\{(?:3|2)\\}.\\{(?:1|2|3|4|5|6|7|8|9|0)\\}\\{(?:1|2|3|4|5|6|7|8|9|0)\\}$
         ^^    ^       ^^                    ^      ^^                    ^

另外,你将交替使用整个表达式:

  • PHP/5.\\{3
  • 2
  • \\}.\\{1
  • 2
  • 3
  • 4
  • 找到
  • 5 匹配!

考虑PEMDAS和嵌套条件(if(a && (b || c)) { })。

答案 1 :(得分:4)

您的RegEx失败,因为|在此处扮演着重要角色。因此,您的字符串匹配项目,例如

  • ^PHP/5.\\{3

  • 2\\}.\\{

等等。自5中的4|5|6匹配以来,它实际上与5中的Mozilla/5.0匹配。

您可以看到相同的在线演示和解释here

Regular expression visualization

Debuggex Demo