2016-10-29 3 views
0

Ich habe eine Zeichenfolge mit vielen Rezidive eines einzelnen Musters wiePython - wie ein Teil mit regex mit n occurrencies ersetzen

a = 'eresQQQutnohnQQQjkhjhnmQQQlkj' 

und ich habe eine andere Zeichenfolge wie

b = 'rerTTTytu' 

I möchte die gesamte zweite Zeichenfolge als Referenz die 'QQQ' und die 'TTT' ersetzen, und ich möchte in diesem Fall 3 verschiedene Ergebnisse finden:

Ich habe versucht, re.sub mit

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

aber ich erhalten nur die erste, und ich weiß nicht, wie die beiden anderen Lösungen zu bekommen.

Antwort

2

Bearbeiten: Wie Sie angefordert haben, werden die beiden Zeichen, die 'QQQ' umgeben, auch jetzt ersetzt.

Ich weiß nicht, ob dies die eleganteste oder einfachste Lösung für das Problem ist, aber es funktioniert:

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) 

Ausgabe

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

Da Sie nicht angegeben haben das Ausgabeformat habe ich einfach in eine Liste eingetragen.

+0

Das Problem, dass ich auch die zwei Zeichen vor und die beiden danach in der ursprünglichen Zeichenfolge ändern müssen, behielten Sie sie in der letzten Zeichenfolge. – Cape

+0

Ich habe gerade meine Antwort aktualisiert - die zwei Zeichen vor "QQQ" und danach wird es auch ersetzt werden. Bitte versuchen Sie in Zukunft einfachere Beispiele in Ihrer Frage zu finden. Es ist wirklich schwierig herauszufinden, was Sie mit einer zufälligen Zeichenkette erreichen wollen. – Maurice

+0

Ich behalte es für meine nächste Frage im Hinterkopf! Vielen Dank! – Cape