2016-10-06 7 views
0

入力を行く:パターン - 1での入力から複数の項目を返すには、

A->(B, 1), (C, 2), (AKSDFSDF, 1231231) ... 

予想される出力:

[('A', 1, 2, 1231231)] 

はそれが仕事を得るように見えることはできません。私のコード:

import re 

pattern = r"([a-zA-z]+)->(.*)" 
r = re.compile(pattern) 

print r.findall("A->(B, 1), (C, 2), (AKSDFSDF, 1231231)") 
>>> [('A', '(B, 1), (C, 2), (AKSDFSDF, 1231231)')] 

これで十分ですが、確かに私が欲しいものを正確に抽出することは可能ですか?

これは仕事ができるのに、私が持っているだろうが、それはdoesntの:

pattern = r"([a-zA-z]+)->((\([a-zA-Z]+,([0-9]+)\))*)" 
>>> [('A', '', '', '')] 

任意のアイデア:このしばらく空の出力(すなわち[])を、スロー

pattern = r"([a-zA-z]+)->([\([a-zA-Z]+,([0-9]+)\)]*)" 

答えて

2

あなたはワード境界\bで始まる単語を選択する肯定先読みアサーションを使用して-または)に続くことができます。

import re 

s = 'A->(B, 1), (C, 2), (AKSDFSDF, 1231231)' 
pattern = re.compile(r'\b\w+(?=-|\))') 
print pattern.findall(s) 
#['A', '1', '2', '1231231'] 

それを試してみてください:https://repl.it/DqSe/0

+0

天才、感謝=) 。 – emihir0

+0

@ emihir0答えが助けてくれれば受け入れることを忘れないでください:) –

+0

はい、申し訳ありませんが、あなたはすぐに回答して、回答を受け入れることはできませんでした。好奇心の理由から、なぜそこに '\ b'が必要ですか?私の例では、それがなくても動作します。 – emihir0

関連する問題