#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 раздел комментариев выглядит очень грязно, давайте удалим комментарии