2011-07-14 13 views
7

mam wyrażenia regularnego tak:Wymiana każdy mecz z inną propozycją

findthe = re.compile(r" the ") 
replacement = ["firstthe", "secondthe"] 
sentence = "This is the first sentence in the whole universe!" 

Co staram się zrobić, to wymienić każde wystąpienie z towarzyszącym zastępczego słowa z listy tak, że zdanie końcowy będzie wyglądać tak:

>>> print sentence 
This is firstthe first sentence in secondthe whole universe 

próbowałem za pomocą re.sub wewnątrz pętli for wyliczanie nad wymiana ale wygląda re.sub zwrotu wszystkich wystąpień. Czy ktoś może mi powiedzieć, jak to zrobić skutecznie?

Odpowiedz

6

Jeśli nie jest to konieczne, aby użyć wyrażenia regularnego, niż można spróbować użyć następującego kodu:

replacement = ["firstthe", "secondthe"] 
sentence = "This is the first sentence in the whole universe!" 

words = sentence.split() 

counter = 0 
for i,word in enumerate(words): 
    if word == 'the': 
     words[i] = replacement[counter] 
     counter += 1 

sentence = ' '.join(words) 

Albo coś jak to będzie działać zbyt:

import re 
findthe = re.compile(r"\b(the)\b") 
print re.sub(findthe, replacement[1],re.sub(findthe, replacement[0],sentence, 1), 1) 

i co najmniej:

re.sub(findthe, lambda matchObj: replacement.pop(0),sentence) 
+0

Niestety, logika zastępcza jest dla mnie nieco bardziej skomplikowana. To, co dostarczyłem, to przypadek testowy. W moim przypadku może być 10-20 'the''s. Nadal można to zrobić za pomocą swojej metody, ale szukam bardziej zwięzłego podejścia. Ale +1 za twoją pomoc. – Legend

+0

Dziękuję - sprawdź ostatnie rozwiązanie. –

+0

Po prostu niesamowite! Jeszcze raz dziękuję za poświęcony czas. – Legend

4

Ostatnia odpowiedź Artsiomu jest destrukcyjna dla zmiennej replacement. Oto sposób, aby to zrobić bez opróżniania: replacement

re.sub(findthe, lambda m, r=iter(replacement): next(r), sentence) 
+0

+1. Dziękuję Ci. – Legend