On 2015-08-18 15:25, Neal Becker wrote:
Trying regex 2015.07.19
I'd like to match recursive parenthesized expressions, with groups such that
'(a(b)c)'
would give
group(0) -> '(a(b)c)'
group(1) -> '(b)'
but that's not what I get
import regex
#r = r'\((?>[^()]|(?R))*\)'
r = r'\(([^()]|(?R))*\)'
#r = r'\((?:[^()]|(?R))*\)'
m = regex.match (r, '(a(b)c)')
m.groups()
Out[28]: ('c',)
You can't capture them into different groups in the general case; it
won't create capture groups dynamically.
Capture into 1 group and then use the .captures method:
import regex
r = r'(\([^()]*(?:(?R)[^()]*)*\))'
m = regex.match(r, '(a(b)c)')
print(m.captures(1))
--
https://mail.python.org/mailman/listinfo/python-list