我试图让自己了解if|else模式匹配如何在 python 中工作,因此从文档中创建了以下测试。据我所知,它无法按文档工作,但我已经学会假设我错过了某个关键步骤。在这个测试案例中,第三项应该失败,因为它缺少它的结束“>”。In [1]: import re, sysIn [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.versionOut[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 版本和主机/操作系统。
添加回答
举报
0/150
提交
取消