python regex if|else 不像宣传的那样工作?

我试图让自己了解if|else模式匹配如何在 python 中工作,因此从文档中创建了以下测试。据我所知,它无法按文档工作,但我已经学会假设我错过了某个关键步骤。


在这个测试案例中,第三项应该失败,因为它缺少它的结束“>”。


In [1]: import re, sys

In [2]: regex = re.compile('(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)')

In [3]: cases  = ['<user@host.com>', 'user@host.com', '<user@host.com', 'user@host.com>']


In [4]: [ re.search(regex, _) and ("match:", _) or ("fail:", _) for _ in cases ]

Out[4]:

[('match:', '<user@host.com>'),

 ('match:', 'user@host.com'),

 ('match:', '<user@host.com'),

 ('fail:', 'user@host.com>')]


In [5]: sys.version

Out[5]: '3.6.5 |Anaconda custom (64-bit)| (default, Apr 26 2018, 08:42:37) \n[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]'

相关的:


(?(id/name)yes-pattern|no-pattern)


将尝试匹配具有yes-pattern 给定 id 或名称的组是否存在,如果不存在则使用 no-pattern。no-pattern是可选的,可以省略。例如, (<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)是一个糟糕的电子邮件匹配模式,它将与 ' <user@host.com>'和 ' '匹配user@host.com,但不能与 ' <user@host.com' 或 ' user@host.com>'匹配。


所以我的问题是,我错过了哪一步?尝试了不同的 python 版本和主机/操作系统。


萧十郎
浏览 125回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python