1

我有一个{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}

但我也想用大括号后面的星号来捕捉字符串。

input_string = '{string}{string}*{string}{string}*'

如何修改正则表达式以便两者{string}{string}*被捕获?

我试过做r'{([^}]*)}|*',但似乎没有工作。

另外,如果字符串包含大括号怎么办?前任。{string{3}}如何确保只捕获外部 {} 而不是内部的?

4

1 回答 1

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}*

至于嵌套括号,简单的正则表达式无法解析它。您可以为此使用递归正则表达式,但它变得不可读(示例)。您应该使用适当的解析库、更多讨论和示例here

于 2013-11-13T08:09:32.013 回答