Как получить подходящее слово в регулярном выражении с чередованиями? - PullRequest
1 голос
/ 01 августа 2020

В python, предположим, я хочу найти в строке

"123" 

вхождения шаблона

"abc|1.*|def|.23" .

Я бы сейчас сделал это следующим образом:

import re
re.match ("abc|1.*|def|.23", "123") .

Вышеупомянутый возвращает объект соответствия, из которого я могу получить начальный и конечный индексы соответствия в строке, которые в данном случае будут 0 и 3.

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

"123" ?

Другими словами: я хотел бы получить «1. *» и «.23». Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 01 августа 2020

Другим подходом было бы создание одной группы захвата для каждого токена в чередовании:

import re

s = 'def'
rgx = r'\b(?:(abc)|(1.*)|(def)|(.23))\b'

m = re.match(rgx, s)
print(m.group(0)) #=> def
print(m.group(1)) #=> None
print(m.group(2)) #=> None
print(m.group(3)) #=> def
print(m.group(4)) #=> None

В этом примере показано совпадение 'def', которому соответствует 3 rd группа захвата, (def).

Python код

2 голосов
/ 01 августа 2020

Учитывая, что ваша строка всегда имеет общий разделитель - в нашем случае "|"

вы можете попробовать:

str = "abc|1.*|def|.23"

matches = [s for s in str.split("|") if re.match(s, "123")]
print(matches)

вывод:

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