初学 Python ,求解释失败的原因

2018-02-09 22:31:07 +08:00
 pkookp8


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> tom@voyager.org'
print("%s %s" % (addr, is_valid_email(addr)))

输出

<Tom Paris> tom@voyager.org False

期望输出 True

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

2958 次点击
所在节点    Python
8 条回复
veelog
2018-02-09 22:39:00 +08:00
改成 search,match 表示从头匹配
pkookp8
2018-02-09 22:44:16 +08:00
@veelog 了解。另外改为 search 又有一个问题,非法+合法+非法的字符串也会被识别为合法,这又该怎么屏蔽
twor
2018-02-09 22:49:06 +08:00
if emailmatch:
----return True
return False
换成
return emailmatch

是不是显得简洁一些?
SingeeKing
2018-02-09 22:57:54 +08:00
@pkookp8 正则表达式结尾加上 $
pkookp8
2018-02-09 22:58:22 +08:00
@twor 对哦....完全没想到可以直接返回
另外我这里的正则表达式也写的很垃圾= =!感觉整个函数都是槽点
twor
2018-02-09 23:52:58 +08:00
import re

addr1 = '<tom paris=""> tom@voyager.org'
addr2 = 'tom@voyager.org'
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>
tuzhifu
2018-02-10 11:03:53 +08:00
结尾加$并且控制最多只能为 3 个字符就好
tennc
2018-02-10 17:02:45 +08:00
www。liaoxuefeng。com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429890

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX