为什么下面的代码只打印出python2.7中的内存位置?

2024-10-03 23:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码用于查找给定字符串的电子邮件地址。但当我打印出来时,它只给出了内存位置。那么如何在下面的代码中获得值呢?我使用的是python2.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


Tags: 字符串代码recom电子邮件地址matchpattern
1条回答
网友
1楼 · 发布于 2024-10-03 23:22:54

您正在打印match对象本身的表示形式,这对调试更有用。在Python2中,没有在表示上做太多的工作,它只打印对象类型和地址:

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

在我的Python3版本中,我得到了一个更好的打印输出,可能是时候迁移到Python3了……:

<_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

注意,您通常应该在访问group之前测试if match is not None:(在re.match不匹配的情况下),但是由于结果是由finditer创建的,因此可以保证您得到的是匹配对象,而不是None

相关问题 更多 >