我完全迷失了这个正则表达式如何匹配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
开头,而字符串则不是。难道不能简单地取消比赛的资格吗?
答案 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。