почему » ана » не заменяется полностью после первого звонка?

#python #string #replace

Вопрос:

Почему «ана» заменяется на «банан» только после второго звонка? Помогите, пожалуйста:

 prop="ana anastasia ana ana re ana ana mere ana" prop=" " prop " " s = 'ana' t = 'banana'  prop=prop.replace(" " s " "," " t " ") print(prop) # banana anastasia banana ana re banana ana mere banana prop=prop.replace(" " s " "," " t " ") print(prop) # banana anastasia banana banana re banana banana mere banana  

Комментарии:

1. Вы добавляете пробел в "ana"

2. Строка-это «… ана-ана …», и вы ищете » ана «. Строка интерпретируется как»…», «ана», «ана…», поэтому второе «ана» не сопоставляется.

Ответ №1:

В вашей первой оценке _ana_ana_ читается как _ana_ ana_ (NB. пробелы как подчеркивание ( _ ) для ясности).

Только первый из них соответствует критерию, подлежащему замене, второй пропускает пробел после использования первой _ana_ строки.

Вам потребуется столько замен, сколько ana слов, разделенных одним пробелом друг после друга.

Один из способов обойти это-использовать регулярное выражение с b разделителем слов:

 prop="ana anastasia ana ana re ana ana mere ana"  import re re.sub(rf'b{s}b', t, prop)  

выход: 'banana anastasia banana banana re banana banana mere banana'

Ответ №2:

Я представляю пространство с помощью _. Здесь, когда вы замените «ана» на «банан» , все "_ana_" будет заменено. После замены даже пробел был заменен, поэтому курсор будет непосредственно переходить к «а» следующего элемента, поэтому он не будет заменен. После второго звонка у нас есть "_ana_" так что на этот раз он снова заменит его на банан, и вы получите желаемый результат. Главным моментом здесь является:

Курсор перейдет непосредственно к «а» следующей строки после замены

Вместо этого вы можете использовать функцию split() и проверять каждое слово, если это ==»ана», затем измените его на «банан».

 prop="ana anastasia ana ana re ana ana mere ana" s1="" for i in prop.split():  if i=="ana":  s1 ="banana" " "  else:  s1 =i " " print(s1) # banana anastasia banana banana re banana banana mere banana   

Комментарии:

1. Это дало bananastasia бы 😉 Ваш вывод неверен

2. Объяснение очень похоже на мое, я не собираюсь говорить, что это неправильно :p. Что касается вашего кода, повторяющееся добавление в строку неэффективно (каждый раз нужно создавать всю строку целиком), лучше используйте список и присоединяйтесь в конце.

3. @mozway раздел комментариев выглядит очень грязно, давайте удалим комментарии