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