私はこれをできるだけシンプルに保ちます:
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
は、中括弧で区切られたテキストを検索します (ネストなし)。