Python 我的正则表达式怎么了?
我希望字符串与正则表达式不匹配,但它是Python 我的正则表达式怎么了?,python,regex,Python,Regex,我希望字符串与正则表达式不匹配,但它是 >>> re.compile('^P|([LA]E?)$').match('PE').group() 'P' 这似乎是一个错误,因为我认为美元没有办法匹配。另一方面,Python的re-lib似乎不太可能无法处理这个简单的情况。我是不是遗漏了什么 顺便说一句,Python会在我启动它时打印出来: Python 2.5.4 r254:67916,2008年12月23日,15:10:54[MSC v.1310 32位英特尔]在win32上
>>> re.compile('^P|([LA]E?)$').match('PE').group()
'P'
这似乎是一个错误,因为我认为美元没有办法匹配。另一方面,Python的re-lib似乎不太可能无法处理这个简单的情况。我是不是遗漏了什么
顺便说一句,Python会在我启动它时打印出来:
Python 2.5.4 r254:67916,2008年12月23日,15:10:54[MSC v.1310 32位英特尔]在win32上
有关详细信息,请键入帮助、版权、信用证或许可证
你写了p或[LA]E?。P匹配 如果您的意思是锚适用于这两种情况,那么您的意思可能是: ^?:p |[LA]E?$它将匹配^p或[LA]E$。你是说^?:P |[LA]E美元吗 变成
^P
|
([LA]E?)$
它在MacOSX和LinuxDebian测试上打印相同的输出。我会惊讶地看到一个bug在三个主要平台上表现相同。此外,“PE”开头有“P”,所以我认为它与正则表达式匹配没有问题。同样,“AE”也与regex匹配。在Debian和Mac OS X上。还有另外两点值得一提:^在使用re.match时是多余的,如果要匹配字符串的结尾,请使用r\Z,而不是$ 为什么$是邪恶的:假设我们想要检查一些字符串的整体是否与一些模式foo匹配。我们不想称之为匹配,如果有任何后的模式。让我们看看如果模式后面有一条换行符会发生什么
>>> import re
>>> s = 'foo\n'
>>> re.match('foo$', s)
<_sre.SRE_Match object at 0x00BAFE90> # match -- FAIL!
>>> re.match('foo\Z', s) # no match -- OK
>>>
以下是摘录自:
$的文档:匹配字符串结尾或字符串结尾的换行符之前。。。这是使用默认模式,与多行模式无关
Docs for\Z:仅在字符串末尾匹配。与模式无关,也不会被新词吓坏。啊,是的。我猜它是这样解析的,因为^和$被视为常规字符。是吗?除了|字符(分组优先级很低)之外,它们在表达式中被视为其他任何东西。这不是错误,而是编写的正则表达式不是询问者想要的。什么是\Z?我很确定$匹配字符串的结尾,除非您使用的是re.multiliteoh!谢谢是的,我知道这一点,看起来很邪恶。另一方面,我相信大多数人都知道$,这使它比\Z更具可读性:/
>>> import re
>>> s = 'foo\n'
>>> re.match('foo$', s)
<_sre.SRE_Match object at 0x00BAFE90> # match -- FAIL!
>>> re.match('foo\Z', s) # no match -- OK
>>>