我正在尝试编写一个正则表达式,该正则表达式可以匹配两组数字或100%用'x'字符分隔。像(第一组)x(第二组)。并且应按原样使用百分号捕获“ 100%”。而且百分号只能在100之后。
例如:
100x100 - OK
100%x100 - OK
99x99 - OK
99%x100 - not OK
99x99% - not OK
这是我的方法:
s = '100%x99%' # this should be failed
match = re.match(r'(100%|\d+(?!%))x(100%|\d+(?!%))', s)
if match:
x = match.group(1)
y = match.group(2)
我希望y为空,并且匹配失败,因为禁止使用“ 99%”。但是通过我的正则表达式,我得到了x = 100%
和y = 9
。
如何修复我的正则表达式?
答案 0 :(得分:2)
这将起作用:(\d+x\d+$)|(100%x\d+$)|(\d+x100%)
这包括100%
可能在x
之后的情况,因此,如果不是这种情况,只需删除最后一组即可。
答案 1 :(得分:2)
(100%|\d+)x(100%|\d+)$
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以在最后一个\b
之后添加word boundary \d+
,以确保它不属于较长匹配项的一部分: