if|else
模式匹配在python中工作,因此从
documentation
. 据我所知,这是不工作的每一个文件,但我已经学会了假设我错过了一个关键步骤的地方。
应该
失败,因为它缺少结束符“>”。
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
(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)
是一个糟糕的电子邮件匹配模式,
它将与'
<user@host.com>
“以及”
user@host.com
但不是用
<user@host.com
“也不是”
user@host.com>
'.
所以我的问题是,我错过了哪一步?在不同的python版本和hosts/os上试用过。