为什么以下代码仅打印出python 2.7中的内存位置?

时间:2018-12-06 09:38:00

标签: python regex python-2.7

编写下面的代码来查找给定字符串的电子邮件地址。但是当我打印出来时,它只给出了存储位置。那么如何在以下代码中获取值?我正在使用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 :(得分:1)

您正在打印匹配对象本身的表示形式,对于调试更有用。在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不匹配),但是在这里,因为结果是由{{1 }},可以确保获得匹配对象,而不是finditer