Можно ли что-то исключить из группы захвата? - PullRequest
2 голосов
/ 09 ноября 2019

Предположим, у меня есть номер телефона:

310-5984

Я хочу захватить все номера в номере телефона, то есть 3105984. Я могу сделать это с двумя группами захвата:

>>> re.match(r'(?P<num_1>\d+)-(?P<num_2>\d+)', '310-5984').groupdict()
{'num_1': '310', 'num_2': '5984'}

Можно ли получить полный номер с одной группой захвата? Я пытался сделать что-то вроде:

>>> re.match(r'(?P<num>(?P<num_1>\d+)(?:-)(?P<num_2>\d+))', '310-5984').groupdict()
{'num': '310-5984', 'num_1': '310', 'num_2': '5984'}

Но он также потреблял разделитель. Как я могу «использовать» разделитель, но не захватывать его в группе? Или это невозможно с регулярным выражением?

1 Ответ

2 голосов
/ 09 ноября 2019

Вы можете попробовать использовать re.sub с функцией обратного вызова, например,

def callback(m):
    return m.group(1) + m.group(2)

phone = "310-5984"
number = re.sub('\\b(\d+)-(\d+)\\b', callback, phone)
print(number)

Это печатает:

3105984

Функция обратного вызова позволяет выполнить дополнительный шаг, включающий весь захватгруппы, полученные из звонка на re.sub. В данном случае мы просто объединяем их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...