модификация выбора вариантов телефонных номеров с использованием регулярных выражений - PullRequest
0 голосов
/ 23 сентября 2019
import re
s =  'nums here (111)123-4567 or (1-800-111-2222)(123)1234567 or 321-123-4567 or ( 112)123-4567 or (113 )123-4567'

Моя цель - получить все номера телефонов от s.

Из выбора вариантов телефонных номеров с помощью регулярных выражений Я пытаюсь сделать следующее:

reg = r'\d{3}-\d{3}-\d{4}|\(\s*\d{3}\s*\)\d{7}|\(\s*\d{3}\s*\)\s*\d{3}-\d{4}' 
r1 = re.findall(reg,s)
r1

Что дает мне то, что я хочу

['(111)123-4567',
 '800-111-2222',
 '(123)1234567',
 '321-123-4567',
 '( 112)123-4567',
 '(113 )123-4567']

Тем не менее, я хотел бы (1-800-111-2222) вместо частичного 800-111-2222

Мой желаемый вывод следующий

 ['(111)123-4567',
     '(1-800-111-2222)',
     '(123)1234567',
     '321-123-4567',
     '( 112)123-4567',
     '(113 )123-4567']

Как мне изменить

reg = r'\d{3}-\d{3}-\d{4}|\(\s*\d{3}\s*\)\d{7}|\(\s*\d{3}\s*\)\s*\d{3}-\d{4}'

, чтобы получить желаемый результат?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Это похоже на работу:

\(?\s*\d?\s*-?\d{3}\s*[)-]?\s*\d{3}\s*-?\s*\d{4}\)?

https://regex101.com/r/tc9E1E/1

1 голос
/ 23 сентября 2019
import re
s =  'nums here (111)123-4567 or (1-800-111-2222)(123)1234567 or 321-123-4567 or ( 112)123-4567 or (113 )123-4567'

reg="\(\d{3}\)\d{3}-\d{4}|\(\d{1}-\d{3}-\d{3}-\d{4}\)|\(\d{3}\)\d{7}|\d{3}-\d{3}-\d{4}|\(\s+\d{3}\)\d{3}-\d{4}|\(\d{3}\s+\)\d{3}-\d{4}"

r1 = re.findall(reg,s)
r1


работает выше, выходы:

['(111)123-4567',
 '(1-800-111-2222)',
 '(123)1234567',
 '321-123-4567',
 '( 112)123-4567',
 '(113 )123-4567']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...