Как исправить несбалансированную ошибку скобок в регулярном выражении? - PullRequest
2 голосов
/ 26 апреля 2019

Я изучаю регулярные выражения с помощью автоматизированного курса скучных вещей Эл Суигарта на удеме, урок 29. Я получаю сообщение об ошибке «несбалансированные скобки в позиции 414 (строка 12, столбец 1)»

Код предназначен для извлечения телефонных номеров и адресов электронной почты с использованием регулярного выражения.

Я попытался сосчитать скобки и вынуть верхнюю и нижнюю скобки для регулярного выражения электронной почты.

#! python3

import re, pyperclip

# Done - TODO: create a regex object for phone numbers
phoneRegex = re.compile(r'''
# Types of number 415-555-0000, 555-0000, (415) 555-0000, 555-0000 ext 12345,
# ext. 12345, x12345
(
((\d\d\d) | (\(\d\d\d\)))?            # area code (optional)
(\s|-)            # first separator
\d\d\d            # first 3 digits
-            # separator
\d\d\d\d            # last 4 digits
((ext(\.)?\s)|x)           # extension word part (optional)
(\d{2,5}))?             # extension number part (optional)
)
''', re.VERBOSE)

# TODO: Create a regex for email addresses
emailRegex = re.compile (r'''
# some.+_thing@(\d{2,5}))?.com

[a-zA-Z0-9_.+]+         # name part - created non default regular   expression class
# to capture any character a-z lowercase, A-Z upper case, numbers 0-9, characters _.+
@        # @ symbol
[a-zA-Z0-9_.+]+        # domain name part

''', re.VERBOSE)

# TODO: Get the text off the clipboard
text = pyperclip.paste()

# TODO: Extract the email/phone from this text
extractedPhone = phoneRegex.findall(text) # creates one string for each group ()
# Make sure desired regex is all in one group ()
extractedEmail = emailRegex.findall(text)

print (extractedPhone)# temporary print function to see if code works
print (extractedEmail)

выдает эту ошибку:

Traceback (последний вызов был последним): Файл "C: \ Users * \ Рабочий стол \ Образование \ информатика \ автоматизировать скучные вещи \ программы \ урок 29 телефон и электронная почта regex.py", строка 18, в '' ', re.VERBOSE) Файл "C: \ Users * \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ re.py", строка 234, в компиляции вернуть _compile (шаблон, флаги) Файл "C: \ Users * \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ re.py", строка 286, в _компиляции p = sre_compile.compile (шаблон, флаги) Файл "C: \ Users * \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ sre_compile.py", строка 764, в компиляции p = sre_parse.parse (p, флаги) Файл "C: \ Users * \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ sre_parse.py", строка 944, в разборе поднять source.error ("несбалансированная скобка") ошибка: несбалансированная скобка в позиции 414 (строка 12, столбец 1)

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Форматируя это с RegexFormat 9 , он показывает дисбаланс и будет вероятно, даст вам представление, как это исправить.

     # Types of number 415-555-0000, 555-0000, (415) 555-0000, 555-0000 ext 12345,
     # ext. 12345, x12345
     (                             # (1 start)
          (                             # (2 start), area code (optional)
               ( \d\d\d )                    # (3)
            |  ( \( \d\d\d \) )              # (4)
          )?                            # (2 end)
          ( \s | - )                    # (5), first separator
          \d\d\d                        # first 3 digits
          -                             # separator
          \d\d\d\d                      # last 4 digits
          (                             # (6 start), extension word part (optional)
               (                             # (7 start)
                    ext
                    ( \. )?                       # (8)
                    \s
               )                             # (7 end)
            |  x
          )                             # (6 end)
          ( \d{2,5} )                   # (9), extension number part (optional)
     )?                            # (1 end)
=    )  <-- Unbalanced  ')'
1 голос
/ 26 апреля 2019

Вам нужно исправить эту строку (\d{2,5}))? # extension number part (optional). Очевидно, что нужно либо добавить / удалить скобки.

Изменение этой строки на (\d{2,5})? исправит ошибку unbalanced parenthesis.

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