【发布时间】:2016-05-22 14:46:36
【问题描述】:
在 Python 3.4 中,我尝试使用两种不同的正则表达式来匹配两种最里面的大括号,即不包含任何其他大括号的大括号。
正则表达式1)匹配不在其他大括号或圆括号内的最里面的大括号,即下面的表达式
re.findall(r'...something...',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")
会返回这个
['{fff}','{kkk}']
目前我正在尝试使用以下表达式
re.findall(r'[^{(]*\{[^{}]+\}[^})]*',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")
不幸的是返回了这个:
['bbb{ccc}ddd', '}eee{fff}ggg(hhh{iii', '})jjj{kkk}']
正则表达式 2) 匹配位于其他大括号或圆括号内的最内层大括号,即以下表达式
re.findall(r'...something...',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")
会返回这个
['{ccc}','{iii}']
我正在尝试这个表达式:
re.findall(r'[{(]*\{[^{}]+\}[})]*',"aaa{bbb{ccc}ddd}eee{fff}ggg(hhh{iii})jjj{kkk}")
但它会返回:
['{ccc}', '{fff}', '{iii})', '{kkk}']
知道如何修改这些正则表达式以获得正确的匹配吗?
【问题讨论】:
-
您真的需要两个表达式,还是只需要一个匹配“不包含任何其他大括号的大括号”的表达式?
-
另外,是否要求您使用正则表达式,或者其他解决方案是否有效?你可以很容易地遍历字符并计算花括号。
标签: regex python-3.x brackets parentheses curly-brackets