Группировка совпадает только в регулярных выражениях - PullRequest
0 голосов
/ 19 сентября 2019

Привет У меня есть регулярное выражение, что я использую условие OR (|), чтобы соответствовать, потому что у меня есть несколько сценариев.

Я хочу сгруппировать только соответствующее условие, но .groups () возвращает всю группировку шаблона.

s = '  (123)   456-7890  '

pattern = re.compile(r'''^\s*[(](\d{3})[)][ ]*(\d{3})[- ]?(\d{4})\s*$|^\s*(\d{3})[-][ ]*(\d{3})[- ]? 
                        (\d{4})\s*$|^(\d{3})(\d{3})(\d{4})\s*$''',re.VERBOSE)
match = pattern.match(s)

match.groups()

Результат будет

('123', '456', '7890', None, None, None, None, None, None)

Мне нужно, чтобы он был просто

('123', '456', '7890')

1 Ответ

0 голосов
/ 19 сентября 2019

Это должно сделать это.

import re
s = '  (123)   456-7890  '

regex_pattern = '^\s*[(]*(\d{3})[)-]*\s*(\d{3})[-]?\s*(\d{4})\s*$'

# USING re.finall 
#   And keeping the first entry only.
#     If you have more entries like this in the string/text,
#     then you will get a list of them.
re.findall(regex_pattern, s)[0]

# USING re.match
pattern = re.compile(regex_pattern, re.VERBOSE)
match = pattern.match(s)
match.groups()

Выход

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