首页 > 解决方案 > 为什么下面的代码只打印出 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

标签: pythonregexpython-2.7

解决方案


您正在打印匹配对象本身的表示,这对调试更有用。在 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(如果 are.match不匹配),但在这里由于结果是由 创建的finditer,因此可以保证您获得匹配对象,而不是None


推荐阅读