2014-07-23 75 views
0

我看到這個線程: 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)]. 

如何改變呢?

+0

的Martijn Pieters的,謝謝你改變的問題! –

回答

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') 
+0

我稍微誤解了原始的正則表達式,但有了你的幫助,我得到了我想要的:http://regex101.com/r/bR0lI8/3非常感謝! –

+0

@QueueOverflow:啊,是的,需要第二個'*?';更新。 –

+0

+1,用於很好的故障排除和包括示例代碼:) – zx81