我的正则表达式有什么问题?
我期待一个字符串不匹配正则表达式,但它是!
>>> re.compile('^P|([LA]E?)$').match('PE').group()
'P'
这看起来像一个错误,因为我认为没有办法让$匹配。 另一方面,Python的re lib似乎不可能处理这个简单的情况。 我在这里错过了什么吗?
顺便说一句,Python启动时打印出来:
在Win32上使用Python 2.5.4(r254:67916,2008年12月23日,15:10:54)[MSC v.1310 32位(Intel)]输入“help”,“copyright”,“credits”或“license”信息。
还有两点值得一提:当你使用re.match()
时^
是多余的,如果你想匹配字符串的末尾,使用r "Z"
而不是"$".
为什么$是邪恶的:假设我们想检查一些字符串s
匹配某个模式foo
。 如果模式之后有任何东西,我们不想称它为匹配。 让我们看看如果模式后面有换行符会发生什么。
>>> import re
>>> s = 'foon'
>>> re.match('foo$', s)
<_sre.SRE_Match object at 0x00BAFE90> # match -- FAIL!
>>> re.match('fooZ', s) # no match -- OK
>>>
以下是文档摘录:
Doc for $
:匹配字符串的结尾或匹配字符串末尾的换行符......这是使用默认模式,与MULTILINE模式无关。
Z
文档:仅匹配字符串的末尾。 与模式无关,并且不会被换行符吓倒。
^P|([LA]E?)$
变
^P
|
([LA]E?)$
你写了“P还是([LA] E?)”)。 “P”匹配。
如果你的意思是让锚点适用于这两种情况,那么你的意思可能是这样的:
^(?:P |?([LA] E))$
链接地址: http://www.djcxy.com/p/48659.html