我的正则表达式有什么问题?

我期待一个字符串不匹配正则表达式,但它是!

>>> 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

上一篇: What's wrong with my regular expression?

下一篇: python equivalent of java OutputStream?