初学Python,求解释代码执行失败的原因


import re
def is_valid_email(addr):
    re_email = re.compile(r'([0-9a-zA-Z][0-9a-zA-Z\.]*)@([0-9a-zA-Z]+)\.([0-9a-zA-Z]+)')
    emailmatch = re_email.match(addr)
    if emailmatch:
        return True
    return False
addr = '<Tom Paris> [email protected]'
print("%s %s" % (addr, is_valid_email(addr)))

输出

<Tom Paris> [email protected] False

期望输出 True

notepad++可以匹配到,另外请原谅我 markdown 语法是刚学的 Alt text


初学Python,求解释代码执行失败的原因

9 回复

改成 search,match 表示从头匹配


我无法理解你的问题

了解。另外改为 search 又有一个问题,非法+合法+非法的字符串也会被识别为合法,这又该怎么屏蔽

if emailmatch:
----return True
return False
换成
return emailmatch

是不是显得简洁一些?

正则表达式结尾加上 $

对哦…完全没想到可以直接返回
另外我这里的正则表达式也写的很垃圾= =!感觉整个函数都是槽点

import re

addr1 = ‘<tom paris=""> [email protected]
addr2 = ‘[email protected]
re_email = re.compile(r’([0-9a-zA-Z][0-9a-zA-Z.]*)@([0-9a-zA-Z]+).([0-9a-zA-Z]+)’)
print(re_email.match(addr1))
print(re_email.match(addr2))
print(re_email.search(addr1))
print(re_email.search(addr2))

➜ TEST python re.py
None
<_sre.SRE_Match object at 0x10b198ae0>
<_sre.SRE_Match object at 0x10b198ae0>
<_sre.SRE_Match object at 0x10b198ae0>

结尾加$并且控制最多只能为 3 个字符就好

www。liaoxuefeng。com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000

回到顶部