我会尽可能简单:
entries = []
for line in inputsource:
entries.append(map(str.strip, line.strip().strip('{}').split(', ')))
因此,对于每一行,先去掉空格,然后再去掉花括号,然后用逗号加空格分隔命令并存储去掉空格的结果。
这取决于命令由逗号加空格分隔的事实,而示例中的参数仅使用不带空格的逗号。如果您有任何违反该差异的内容,那么您确实需要使用正则表达式。我只会将其限制为拆分:
import re
commandsep = re.compile(r'(?<=\)),\s*')
for line in inputsource:
entries.append(map(str.strip, commandsep.split(line.strip().strip('{}'))))
commandsep
表达式在任何逗号加可选空格上拆分,前提是它前面有一个右)
括号(使用后视断言)。
对于您的输入,结果是:
>>> entries
[['topic.equals(org.fedoraproject.prod.bodhi.buildroot_override.tag)', 'foo.notequals(bar)'], ['topic.in(1,2,3)', 'foo.equals(baz)']]
如果这些条目嵌入到较大的文本正文中,则正则表达式可能会有所帮助,但只能找到大括号分隔的值:
import re
expression = re.compile(r'{[^{}]+}')
inputsource = expression.findall(largerbodyoftext)
whereexpression
将找到由大括号分隔的任何文本(无嵌套)。