2017-11-21 6 views
-4

私は現在、いくつかのツールを試作していて、pyhtonで正規表現の質問を受けています。 文字列「aaa bbb ccc ddd eee fff ggg」を取得しました。 これで、タイプbbb .... fffとccc ... fffのすべての部分文字列を検索したいと考えています。 regex(bbb。* fff)|(ccc。* fff)を使用しています。結果セットには1つのエントリしか含まれていません。regex:result value structure

final_string = "aaa bbb ccc ddd eee fff ggg" 
regex = '(bbb.*fff)|(ccc.*fff)' 
pattern = re.compile(regex) 
print(len(re.findall(pattern, final_string))) 
#returns 1 resp when printing ('bbb ccc ddd eee fff', '') 

しかし、私は要件を満たす両方の部分文字列を取得したいと思い、次のよう はやって? どうすればいいですか?

+0

は、あなたの出力があることを正確に何をしたいですか? – CAustin

+0

"bbb ccc ddd eee fff"と "ccc ddd eee fff" – 6230R

+0

2つの異なるパターンをマッチさせ、2つの異なる結果を返そうとしています。これはあなたが望むように動作しません。私はそれらを別々にマッチングさせることを提案する。 – CAustin

答えて

0

基本的に、正規表現は、より最適化されるように(場合によっては無限再帰を避けるために)、後方に移動して正規表現グループのどこにあるのかをチェックしません。しかし、これを回避するには、re.finditerを使用します。

import re 
final_string = "aaa bbb ccc ddd eee fff ggg" 
regex = '(bbb|ccc)(?=.*?fff)' 
for match in re.finditer(regex, final_string): 
    print(re.search("(.*?fff)",final_string[match.start():]).group(0)) 

出力

bbb ccc ddd eee fff 
ccc ddd eee fff 
+0

ご協力いただきありがとうございます! – 6230R