регулярное выражение в Python - PullRequest
       0

регулярное выражение в Python

17 голосов
/ 23 августа 2010

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

# 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

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

  1. Не работает, если m.group (0) содержит какие-либо специальные символы регулярного выражения (например, *, + и т. Д.).

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

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

1 Ответ

20 голосов
/ 23 августа 2010

Функция 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...