2017-09-08 7 views
0

アイテム4aからアイテム4aまでのテキストを選択しようとしていますが、アイテム4aを見つけることができない場合は、アイテム5を探して検索を終了する必要があります。余分な一致を返す

reg ex(グループとともに)は正しい値を選ぶことができます。ただし、一致したグループのタプルを返します。

re.findall(r'item 3\D(.*?)(item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a") 

出力:

[('first value item 4 foo ', 'item 4a'), ('second value ', 'item 4a')] 

グループを使用せずにこれを達成するために任意のより良い方法を提案してください。

答えて

0

あなたがしてnon-capturing groupを使用することができます。

re.findall(r'item 3\D(.*?)(?:item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a") 
+0

ありがとう@zipa ..まさに私が必要なもの! – Apoorv

0

あなたが先に外観を使用することができますまたは第2のグループは(?:非捕捉しますので、item4aまたはitem5は返却されません(=?):

re.findall(r'item 3\D(.*?)(?=item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a") 
​#       ^^ # or use ?: as the other answer 
# ['first value item 4 foo ', 'second value '] 
+0

お返事いただきありがとうございます。ご協力いただきありがとうございます。 – Apoorv

関連する問題