我有一个像{string}{string}{string}
这样的字符串,我可以通过
import re
input_string = '{string}{string}{string}'
for match in re.finditer(r'{([^}]*)}', input_string):
print str(match.group(0)) #outputs {string}
但我也希望在大括号之后用asterick捕捉字符串。
input_string = '{string}{string}*{string}{string}*'
如何修改正则表达式以便捕获{string}
和{string}*
?
我尝试过r'{([^}]*)}|*'
,但似乎没有工作。
另外,如果字符串包含大括号怎么办?恩。 {string{3}}
如何确保只捕获外部{}而不是内部?
答案 0 :(得分:1)
在正则表达式的末尾添加\*?
以匹配可选的*
。
import re
input_string = '{string}{string}*{string}{string}*'
for match in re.finditer(r'{([^}]*)}\*?', input_string):
print str(match.group(0)) #outputs {string}
输出:
{string}
{string}*
{string}
{string}*
对于嵌套括号,简单的正则表达式无法解析它。您可以为此使用递归正则表达式,但它变得不可读(example)。您应该使用正确的解析库,更多讨论和示例here。