Почему следующий код распечатывает только области памяти в Python 2.7? - PullRequest
0 голосов
/ 06 декабря 2018

Следующий код написан для поиска адресов электронной почты данной строки.Но когда я распечатываю, это дает только места памяти.Итак, как мне получить значения в следующем коде?Я использую Python 2.7.Я думаю, что следующий код написан на Python3.

import re

    emails = '''
    CoreyMSchafer@gmail.com
    corey.schafer@university.edu
    corey-321-schafer@my-work.net
    '''

    pattern = re.compile(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')

    matches = pattern.finditer(emails)

    for match in matches:
        print match

Источник: https://github.com/CoreyMSchafer/code_snippets/blob/master/Python-Regular-Expressions/simple.py

1 Ответ

0 голосов
/ 06 декабря 2018

вы печатаете представление самого объекта сопоставления, более полезное для отладки.В Python 2 не было сделано больших усилий для этого представления, оно просто печатает тип объекта и адрес:

<_sre.SRE_Match object at 0x0000000003425E68>
<_sre.SRE_Match object at 0x0000000003425ED0>
<_sre.SRE_Match object at 0x0000000003425E68>

В моей версии Python 3 я получаю лучшую распечатку, возможно, пришло время перейти наpython 3 ...:

<_sre.SRE_Match object; span=(1, 24), match='CoreyMSchafer@gmail.com'>
<_sre.SRE_Match object; span=(25, 53), match='corey.schafer@university.edu'>
<_sre.SRE_Match object; span=(54, 83), match='corey-321-schafer@my-work.net'>

В любом случае, вы хотите напечатать основную захваченную группу:

for match in matches:
    print(match.group(0))

результат:

CoreyMSchafer@gmail.com
corey.schafer@university.edu
corey-321-schafer@my-work.net

обратите внимание, что вы должныобычно тестируют if match is not None: перед доступом к group (в случае re.match, который не соответствует), но здесь, поскольку результат был создан finditer, гарантируется, что вы получите совпадающие объекты, а не None

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