与数字或100%匹配的正则表达式,但不匹配99%

时间:2018-07-18 14:14:20

标签: python regex

我正在尝试编写一个正则表达式,该正则表达式可以匹配两组数字或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

如何修复我的正则表达式?

4 个答案:

答案 0 :(得分:2)

这将起作用:(\d+x\d+$)|(100%x\d+$)|(\d+x100%)

这包括100%可能在x之后的情况,因此,如果不是这种情况,只需删除最后一组即可。

答案 1 :(得分:2)

(100%|\d+)x(100%|\d+)$

demo here

答案 2 :(得分:1)

其他答案确实有用,但是我会修剪看似不必要的部分,以提供以下信息:

(100%|\d+)x(100%|(\d+(?!\%|\d)))

这也不需要带有$的结束行。您可以看到它在here上正常工作。

答案 3 :(得分:1)

您可以在最后一个\b之后添加word boundary \d+,以确保它不属于较长匹配项的一部分:

(100%|\d+(?!%))x(100%|\d+\b(?!%))