2016-05-07 5 views
0

Я хочу использовать регулярные выражения для замены вещей в начале и конце всех слов в файле. Вот некоторые примеры случаев:Заменить символы в конце строки

  1. слова, оканчивающиеся на «ИНГ» переодеваться до конца в «ВНД»: ясно ИНГ = четкие ВНД
  2. слова, начинающиеся с «суб» переодеться, чтобы начать с «автобус»: юг тракта = шина тракта

Как я могу выделить эти слова в списке и применить пример изменение? Все слова строчные.

+0

Если «вычесть» изменение «Bustract»? – zondo

+0

О, это все, что было бы нечувствительным к регистру, плохо добавьте это. – Scherf

+0

Добро пожаловать в переполнение стека. Прежде всего, проверьте «Сброс стека» [help on ask questions] (http://stackoverflow.com/help/asking). Сосредоточьтесь на [о каких темах я могу спросить здесь] (http://stackoverflow.com/help/on-topic), [Какие типы вопросов я должен избегать?] (Http://stackoverflow.com/help/dont -ask), [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask), [Как создать минимальный, полный и проверенный пример] (http: // stackoverflow. com/help/mcve) и [Контрольный список вопросов переполнения стека] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist). –

ответ

2

Используйте \b, чтобы убедиться, что что-то в начале или в конце слова:

import re 

sentence = "..." 
converted = re.sub(r'ing\b', 'gni', re.sub(r'\bsub', 'bus', sentence)) 
+0

Что такое нижний регистр r в начале re.sub? – Scherf

+1

@Scherf: Это означает, что это [необработанная строка] (https://stackoverflow.com/questions/2081640/what-exactly-do-and-r-string-flags-do-in-python-and -что-являются-сырец-строка-л). – zondo

1
import re 

strings = ['clearing', 
      'subtract'] 

for i, string in enumerate(strings): 
    if re.match(pattern='.*ing$', string=string): 
     strings[i] = re.sub(pattern='ing$', repl='gni', string=string) 
    if re.match(pattern='^sub.*', string=string): 
     strings[i] = re.sub(pattern='^sub', repl='bus', string=string) 
print(strings) 
+0

Зачем вы вводите объект соответствия? Просто сделайте замену. – zondo

+0

Если матч на первой итерации отсутствует, «ing» на клиринге будет заменен на «gni». Тогда очистка не будет соответствовать второму шаблону, а sub возвращает строку, которую он передал, поэтому очистка возвращается в список. Запустите его, чтобы попробовать. – Daniel

+0

В этом случае измените 'stringings [i] = ...' на 'string = stringings [i] = ...' – zondo