正则表达式:组中缺少符号

时间:2014-07-23 14:17:47

标签: python regex

我看过这个帖子: javascript regex -- only produces last letter in (.)+ group?

那里提供的解决方案在我的案例中没有帮助;我尝试了什么:

^{[^d]*([\d\-]+),([\d\-]+)[^d]*{?(\d+)}?[^}]+}$

Online demo at regex101.com

我们需要将解析字符串{left/(-1,0)/$\upsilon_{11}$}{left/(1,0)/$\upsilon_{1}$}作为

[(-1,0,11),(1,0,1)].

不幸的是,我得到了:

[(1,0,1),(1,0,1)].

如何更改?

1 个答案:

答案 0 :(得分:2)

您需要在开头的负字符类中包含 -

^{[^d-]*([\d\-]+),([\d-]+)[^d]*{?(\d+)}?[^}]+}$

让它非贪婪也会有所帮助:

^{[^d-]*?([\d\-]+),([\d-]+)[^d]*?{?(\d+)}?[^}]+}$

regex101.com的演示。

Python会话:

>>> import re
>>> pattern = re.compile(r'^{[^d-]*?([\d\-]+),([\d-]+)[^d]*?{?(\d+)}?[^}]+}$', re.M)
>>> pattern.search('{left/(-1,0)/$\upsilon_{11}$}').groups()
('-1', '0', '11')
>>> pattern.search('{left/(1,0)/$\upsilon_{1}$}').groups()
('1', '0', '1')