Подтвердить что ты не робот

Регулярное выражение python и заменить

Мне нужно найти, обработать и удалить (по одному) любые подстроки, которые соответствуют довольно длинному регулярному выражению:

# 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

Код выше не подходит по двум причинам:

  • Это не работает, если m.group(0) содержит любые специальные символы регулярного выражения (например, *, + и т.д.).

  • Мне кажется, что я дублирую работу: сначала я ищу строку для регулярного выражения, а затем мне нужно искать ее снова, чтобы удалить ее.

Какой хороший способ сделать это?

4b9b3361

Ответ 1

Функция 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)