2016-08-04 6 views
0

Не удалось найти что-нибудь, что могло бы решить эту проблему (replace() не работает).Заменить последовательность слов в строке со строкой python

У меня есть предложение, как:

sentence_noSlots = "Albania compared to other CountriesThe Internet users of Albania is similar to that of Poland , Portugal , Russia , Macedonia , Saudi Arabia , Argentina , Greece , Dominica , Azerbaijan , Italy with a respective Internet users of 62.8 , 62.1 , 61.4 , 61.2 , 60.5 , 59.9 , 59.9 , 59.0 , 58.7 , 58.5 -LRB- per 100 people -RRB- and a global rank of 62 , 63 , 64 , 65 , 66 , 68 , 69 , 70 , 71 , 72.10 years growthAlbania 's Internet users had a positive growth of 5,910 -LRB- % -RRB- in the last 10 years from -LRB- 2003 to 2013 -RRB- ." 

Я тогда строку как:

extracted_country = Saudi Arabia 
extracted_value = 58.5 

Мне нужно заменить Saudi Arabia в строке с <location>empty</location> и 58.5 с <number>empty</number>. Мой текущий метод:

sentence_noSlots.replace(str(extracted_country),"<location>empty</location>") 
sentence_noSlots.replace(str(extracted_value),"<number>empty</number>") 

Однако, поскольку Саудовская Аравия - это два слова, простое слово заменить не работает. Также не tokenizing первый и замена работы из-за того же типа выпуска:

sentenceTokens = sentence_noSlots.split() 
          for i,token in enumerate(sentenceTokens): 
           if token==extracted_country: 
            sentenceTokens[i]="<location>empty</location>" 
           if token==extracted_value: 
            sentenceTokens[i]="<number>empty</number>" 
          sentence_noSlots = (" ").join(sentenceTokens) 

Как я могу достичь того, чего я хочу достичь?

ответ

1

string.replace() не на месте. Строки неизменяемы в python.

От python docs:

string.replace (s, старый, новый [, MaxReplace]) Возвращает копию строки s со всех вхождений подстроки старых заменены новыми. Если задан необязательный аргумент maxreplace, то первые вхождения maxreplace заменяются .

ли это:

>>> sentence_noSlots = "Albania compared to other CountriesThe Internet users of Albania is similar to that of Poland , Portugal , Russia , Macedonia , Saudi Arabia , Argentina , Greece , Dominica , Azerbaijan , Italy with a respective Internet users of 62.8 , 62.1 , 61.4 , 61.2 , 60.5 , 59.9 , 59.9 , 59.0 , 58.7 , 58.5 -LRB- per 100 people -RRB- and a global rank of 62 , 63 , 64 , 65 , 66 , 68 , 69 , 70 , 71 , 72.10 years growthAlbania 's Internet users had a positive growth of 5,910 -LRB- % -RRB- in the last 10 years from -LRB- 2003 to 2013 -RRB- ." 
>>> 
>>> extracted_country = "Saudi Arabia" 
>>> extracted_value = 58.5 
>>> s = sentence_noSlots.replace(str(extracted_country),"<location>empty</location>").replace(str(extracted_value),"<number>empty</number>") 
>>> s 
"Albania compared to other CountriesThe Internet users of Albania is similar to that of Poland , Portugal , Russia , Macedonia , <location>empty</location> , Argentina , Greece , Dominica , Azerbaijan , Italy with a respective Internet users of 62.8 , 62.1 , 61.4 , 61.2 , 60.5 , 59.9 , 59.9 , 59.0 , 58.7 , <number>empty</number> -LRB- per 100 people -RRB- and a global rank of 62 , 63 , 64 , 65 , 66 , 68 , 69 , 70 , 71 , 72.10 years growthAlbania 's Internet users had a positive growth of 5,910 -LRB- % -RRB- in the last 10 years from -LRB- 2003 to 2013 -RRB- ." 
1

Я предполагаю, что вы имели в виду:

extracted_country = "Saudi Arabia" 
extracted_value = "58.5" 

Затем метод .Надеть работает, как ожидалось. Будьте осторожны, но это НЕ модификатор: он возвращает новую строку с модификацией. «sentence_noSlots» останется прежним.

Так приковав как .Привернуть вы можете достичь его, как это:

sentence_slots = sentence_noSlots.replace(str(extracted_country),"<location>empty</location>").replace(str(extracted_value),"<number>empty</number>")