2

我正在使用 python 3.4.1 版本,但我不明白以下正则表达式的结果:

import re
print(re.match("\[{E=(.*?),Q=(.*?)}\]","[{E=KT,Q=P1.p01},{E=KT2,Q=P2.p02}]").groups())
('KT', 'P1.p01},{E=KT2,Q=P2.p02')

我希望结果是

('KT', 'P1.p01')

但显然是第二个。*?“吃掉”所有字符,直到最后的“}]”。我希望停在第一个 '}" 字符处。

如果我省略了 '[' 和 ']' 字符,则行为如我所料:

print(re.match("{E=(.*?),Q=(.*?)}","{E=KT,Q=P1.p01},{E=KT2,Q=P2.p02}").groups())

('KT', 'P1.p01')
4

2 回答 2

4

强制在\]匹配中出现方括号 - 字符串末尾只有一个方括号。正则表达式引擎必须匹配其他选项。如果您将其删除或使其成为可选 ( \]?),它将停在最近的}.

于 2014-06-23T14:20:20.123 回答
2

您似乎想要的是'{E='和下一个逗号','之间的所有内容,然后'Q='是下一个右大括号之间的所有内容'}'。一种表达方式是:

{E=([^,]*),Q=([^}]*)}

例如,这里的[^,]*意思是“尽可能多的非逗号字符”

示例用法:

>>> import re
>>> re.findall("{E=([^,]*),Q=([^}]*)}", 
               "{E=KT,Q=P1.p01},{E=KT2,Q=P2.p02}")
[('KT', 'P1.p01'), ('KT2', 'P2.p02')]

你可以在这个 regex101 演示中看到完整的解释。

于 2014-06-23T14:30:57.407 回答