2016-10-29 12 views
0

私はPythonの - n個のoccurrenciesで正規表現を使用して部分文字列を置換する方法

a = 'eresQQQutnohnQQQjkhjhnmQQQlkj' 

のような単一のパターンのrecurrenciesの多くの文字列を持っていると私は

b = 'rerTTTytu' 

私のような別の文字列を持っています'QQQ'と 'TTT'を参考にして番目の文字列をに置き換えたい場合は、この場合3つの異なる結果を見つけたいと思います。

'ererTTTytuohnQQQjkhjhnmQQQlkj' 
'eresQQQutnrerTTTytujhnmQQQlkj' 
'eresQQQutnohnQQQjkhjrerTTTytu' 

私はre.sub

re.sub('\w{3}QQQ\w{3}' ,b,a) 

を使用してみましたが、私は最初のものだけを得る、と私は、他の2つのソリューションを取得する方法がわかりません。

答えて

2

編集:あなたがリクエストしたとおり、 'QQQ'を囲む2文字も置き換えられます。

これが問題の最もエレガントなまたは最も簡単な解決策である場合、私は知りませんが、それは動作します:あなたが指定されていませんでしたので

import re 

# Find all occurences of ??QQQ?? in a - where ? is any character 
matches = [x.start() for x in re.finditer('\S{2}QQQ\S{2}', a)] 
# Replace each ??QQQ?? with b 
results = [a[:idx] + re.sub('\S{2}QQQ\S{2}', b, a[idx:], 1) for idx in matches] 

print(results) 

出力

['errerTTTytunohnQQQjkhjhnmQQQlkj', 
'eresQQQutnorerTTTytuhjhnmQQQlkj', 
'eresQQQutnohnQQQjkhjhrerTTTytuj'] 

出力フォーマット、私はちょうどそれをリストに入れました。

+0

元の文字列の前と後の2文字を変更しなければならないという問題は、それらを最後の文字列に保持したことです。 – Cape

+0

私はちょうど "QQQ"の前の2文字とその後に置き換えられる私の答えを更新しました。今後、ご質問に例文を簡単に追加してみてください。ランダムな文字列からしようとしていることを理解することは本当に難しいです。 – Maurice

+0

私は次の質問に留意しています! ありがとうございます! – Cape

関連する問題