[英]Python regular expression gives unexpected result
我试图创建一个svn pre-commit钩子,但是无法使我的正则表达式按预期工作。 对于看起来不像“ DEV-5 |某些消息”的消息,它应该打印False
。 为什么我在这里得到True?
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> p = re.compile("^\[[A-Z]+-[0-9]+\] | .+$", re.DOTALL)
>>> message = "test message"
>>> match = p.search(message)
>>> bool(match)
True
>>> p = re.compile("^[A-Z]+-[0-9]+ \| .+$", re.DOTALL)
>>> print p.search("test message")
None
>>> print p.search("DEV-5 | some message")
<_sre.SRE_Match object at 0x800eb78b8>
\\[
和\\]
|
罪魁祸首是尾随的“ |。+ $”,它与“ message”相匹配,以替代第一个正则表达式。 正如罗曼指出的那样,您要匹配文字“ |” 因此您必须将其转义为“ \\ |”。
要查看匹配的内容,您可以执行以下操作:
print match.group()
' message'
(顺便说一句,一种更快的非正则表达式仅用于处理包含竖线的行的方法是使用line.split('|'):
for line in ...:
parts = line.split('|',1)
if len(parts)==1: continue
(code,mesg) = parts
我没有运行代码,但是我怀疑您的正则表达式中替代( |
)后的部分与任何以空格开头的非空字符串匹配,在本例中为" message"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.