我循环通过一个模板化词典进行替换。字典中的值如下所示:
foo{sub1}{sub2}bar{sub3}
其中foo
,bar
和subN
可以是任意随机文本(不包含大括号字符)。
我尝试在列表中识别{sub1}
,{sub2}
和{sub3}
。我可以自己解析角色但是假设有一个单线解决方案。
有人看到了吗?
答案 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']