Я начинаю изучать VIM (я скачал плагин эмулятора для своей IDE), и неудивительно, что это меня раздражает и очень медленно. Это все нормально, и я понимаю, что через этот этап проходят все.
Однако эта особенность довольно неприятна - невозможность перейти на следующую строку с помощью l , предыдущая с h ] или выполните поиск более чем в одной строке с помощью f . # s - это строка, а 1: m = p.match (s), если m - None: break ...
Мне нужно найти, обработать и удалить (одну за другой) любые подстроки, которые соответствуют довольно длинному регулярному выражению:
# p is a compiled regex
# s is a string
while 1:
m = p.match(s)
if m is None:
break
process(m.group(0)) #do something with the matched pattern
s = re.sub(m.group(0), '', s) #remove it from string s
Приведенный выше код не подходит по 2 причинам:
Он не работает, если m.group (0) содержит какие-либо специальные символы регулярных выражений (например, *, + и т. Д.).
Это такое ощущение, что я дублирую работу: сначала я ищу в строке регулярное выражение, а потом мне приходится искать его снова, чтобы удалить.
Как это лучше сделать?
Функция re.sub может принимать функцию в качестве аргумента, поэтому при желании вы можете комбинировать этапы замены и обработки:
# p is a compiled regex
# s is a string
def process_match(m):
# Process the match here.
return ''
s = p.sub(process_match, s)