繁体   English   中英

Python正则表达式产生意外结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM