python正则表达式if | else不按广告的方式工作?

python正则表达式if | else不按广告的方式工作?,python,regex,if-statement,documentation,Python,Regex,If Statement,Documentation,我试图让自己了解if | else模式匹配在python中是如何工作的,因此从中创建了以下测试。据我所知,根据文档,它不起作用,但我学会了假设我错过了某个关键步骤 在这个测试用例中,第三项应该失败,因为它缺少结束'>' In [1]: import re, sys In [2]: regex = re.compile('(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)') In [3]: cases = ['<user@host.com>', 'user

我试图让自己了解
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)]'
[1]中的
:导入re,系统
[2]中:regex=re.compile(“(|$)”)
在[3]中:cases=['','user@host.com', '']
在[4]中:[重新搜索(regex,u)和(“match:”,u)或(“fail:”,u)以查找案例中的u]
出[4]:
[(“匹配:”,“”),
('match:','user@host.com'),
(“匹配:”,“”)]
在[5]中:sys.version
Out[5]:“3.6.5 | Anaconda custom(64位)|(默认值,2018年4月26日,08:42:37)\n[GCC 4.2.1 Compatible Clang 4.0.1(标记/发布\最终版)]”
相关:

(?(id/名称)是模式|否模式)

将尝试与
yes模式匹配
如果具有给定id或名称的组存在,并且没有模式,则
没有<代码>无模式
是可选的,可以省略。例如
(|$)
是一种糟糕的电子邮件匹配模式, 它将与“
”以及“
user@host.com
', 但不能与“
”一起使用


所以我的问题是,我错过了哪一步?在不同的python版本和主机/os上试用。

您使用的是
搜索
,询问字符串是否包含与正则表达式匹配的内容,而不是询问它是否匹配
问题不在于if | else
。问题是您的正则表达式需要一个字符串结束锚点
$
\Z
。这不是问题的原因,但是如果条件为其他情况,则应该使用
yes\u case,而不是
条件和yes\u case或no\u case
。它不太容易出现错误,因为当
yes\u case
是错误的时候,它不会转到
no\u case
。是的-只是想要一个快速的演示…就是这样。叹气在之前的一次迭代中,我在一个稍有不同的正则表达式上测试了
match
,没有想到用原来的正则表达式再试一次。谢谢