Я знаю, как сделать замену строк в python, но мне нужен способ заменить только если последовательность находится в конце слова. например:
rule: at -> ate
so:
cat -> cate
but:
attorney -> attorney
спасибо.
Регулярное выражение может сделать это с легкостью:
import re
regx = re.compile('at\\b')
ch = 'the fat cat was impressed by all the rats gathering at one corner of the great room'
print ch
print
print regx.sub('ATU',ch)
результат
the fat cat was impressed by all the rats gathering at one corner of the great room
the fATU cATU was impressed by all the rats gathering ATU one corner of the greATU room
.
С помощью регулярных выражений мы можем выполнять очень сложные задачи.
Для Exemple, заменив несколько видов строк с определенной заменой для каждого, благодаря использованию функции обратного вызова (здесь с именем РЕПЛ, который принимает перехваченных MatchObjects)
import re
regx = re.compile('(at\\b)|([^ ]r(?! ))')
def repl(mat, dic = {1:'ATU',2:'XIXI'}):
return dic[mat.lastindex]
ch = 'the fat cat was impressed by all the rats gathering at one corner of the great room'
print ch
print
print regx.sub(repl,ch)
результат
the fat cat was impressed by all the rats gathering at one corner of the great room
the fATU cATU was imXIXIessed by all the rats gathXIXIing ATU one cXIXIner of the XIXIeATU room
Нет специального метода для этого, но это довольно просто:
w = 'at'
repl = 'ate'
s = 'cat'
if s.endswith(w):
# if s ends with w, take only the part before w and add the replacement
s = s[:-len(w)] + repl
Вы можете использовать регулярные выражения с модулем re и следующим кодом:
re.sub(re.escape(suffix)+"$", replacement, word)
Если вам нужно сделать это для текста дольше, чем одно слово
re.sub(re.escape(suffix)+r"\b", replacement, word)
потому что \b
является границей слова, поэтому суффикс, за которым следует граница слова, находится в конце любого слова в тексте
Существует ли определенная длина суффикса? Если нет, можете ли вы просто начать с индекса -1 строки и выполнить обратное количество символов, которое вы ищете? Затем просто выполните замену строки, как обычно.
re.escape(suffix)
.