如何在字符串中找到匹配的大括号?

时间:2015-09-02 13:48:15

标签: python regex

我循环通过一个模板化词典进行替换。字典中的值如下所示:

foo{sub1}{sub2}bar{sub3}

其中foobarsubN可以是任意随机文本(不包含大括号字符)。

我尝试在列表中识别{sub1}{sub2}{sub3}。我可以自己解析角色但是假设有一个单线解决方案。

有人看到了吗?

3 个答案:

答案 0 :(得分:2)

>>> re.findall('{.*?}', 'foo{sub1}{sub2}bar{sub3}')
['{sub1}', '{sub2}', '{sub3}']

findall找到...所有出现的模式并返回一个列表。如果需要迭代器,请使用finditer

但请注意,如果您的字符串包含{abc{def}}之类的内容,则该模式无法正常工作。

答案 1 :(得分:2)

您可以使用以下正则表达式:

>>> s = 'foo{sub1}{sub2}bar{sub3}'
>>> re.findall('{([^}]+)}', s)
['sub1', 'sub2', 'sub3']

我们捕获{}内的所有内容,然后findall只返回包含所有匹配组的列表。

如果您想将{}作为匹配字符串的一部分,只需删除该组:

re.findall('{[^}]+}', s)

答案 2 :(得分:1)

正则表达式解决方案是两线解决方案,因为您必须先导入模块。 :) 列表生成和拆分方法有一个简单的棘手解决方案:

>>> [x.split('}')[0] for x in 'foo{sub1}{sub2}bar{sub3}'.split('{') if '}' in x]
['sub1', 'sub2', 'sub3']