昨日、これと同様の質問を投稿しました: Python Regex Named Groups。この作業は、単純なものにはかなり適しています。
いくつかの調査の後、私はpyparsingライブラリについて読みました.pyparsingライブラリは私の仕事にぴったりだと思われます.
text = '[@a eee, fff fff, ggg @b eee, fff, ggg @c eee eee, fff fff,ggg ggg@d]'
command_s = Suppress(Optional('[') + Literal('@'))
command_e = Suppress(Literal('@') | Literal(']'))
task = Word(alphas)
arguments = ZeroOrMore(
Word(alphas) +
Suppress(
Optional(Literal(',') + White()) | Optional(White() + Literal('@'))
)
)
command = Group(OneOrMore(command_s + task + arguments + command_e))
print command.parseString(text)
# which outputs only the first @a sequence
# [['a', 'eee', 'fff', 'fff', 'ggg']]
# the structure should be someting like:
[
['a', 'eee', 'fff fff', 'ggg'],
['b', 'eee', 'fff', 'ggg'],
['c', 'eee eee', 'fff fff', 'ggg ggg'],
['d']
]
@ はシーケンスの開始を示します。最初の単語はタスク (a) で、その後にオプションのコンマ区切りの引数 (eee、fff fff、ggg) が続きます。問題は、上記のコードでは @b、@c、および @d が無視されることです。また、「fff fff」は 2 つの別個の引数として扱われるため、1 つだけにする必要があります。