Записать сообщение, когда шаблон регулярного выражения был найден или нет (подробный re.sub) - PullRequest
0 голосов
/ 20 декабря 2018

При замене текста на re.sub:

import re
s = 'This is a sample123 text'
s = re.sub(r'sample\d+', 'another', s)
print(s)

есть ли встроенный способ сделать re.sub подробным? т.е. напечатать:

  • 'Шаблон ... был найден и успешно заменен'

  • или 'Шаблон ... не найден'

Я собирался свернуть свою собственную функцию:

def mysub(r1, r2, s):
    if re.search(r1, s):  # note: don't use re.match: it matches from beginning only
        print('Pattern %s found' % r1)
        return re.sub(r1, r2, s)
    else:
        print('Pattern %s not found' % r1)
        return s

, но я подумал, что, возможно, это возможно из коробки.

1 Ответ

0 голосов
/ 20 декабря 2018

Я думаю, что прямой ответ на ваш вопрос - нет.В пакете re, о котором я знаю, нет «подробного» метода ведения журнала.Тем не менее, re.subn() здесь довольно полезно, поскольку возвращает количество выполненных замен, поэтому вы можете избежать проверки re.search() перед вызовом re.sub().

Например:

import re

regex = r'sample\d+'
sub = 'another'
text = 'This is sample123 text'
[new_text, count] = re.subn(regex, sub, text)

message = f'{regex} matched, {count} substitutions' if count else f'{regex} not found'

print(message)
print(new_text)
# OUTPUT
# sample\d+ matched, 1 substitutions
# This is another text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...