首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python正则表达式产生意外结果

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

Stack Overflow用户
提问于 2011-09-21 16:50:14
回答 3查看 87关注 0票数 0

我正在尝试创建一个svn预提交钩子,但无法让我的正则表达式按预期工作。对于看起来不像"DEV-5 | some message“的消息,它应该打印False。为什么我在这里得到True?

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-21 16:55:59

代码语言:javascript
复制
>>> 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>

\]

  • you需要转义|

  • 你不需要\[
票数 6
EN

Stack Overflow用户

发布于 2011-09-21 16:57:36

罪魁祸首是尾随的“| .+$”,它匹配‘message’作为第一个正则表达式的替代。就像罗曼指出的那样,你的意思是匹配文字'|‘,所以你必须将它转义为'|’。

要查看匹配的内容,您可以执行以下操作:

代码语言:javascript
复制
print match.group()
' message'

(顺便说一下,只处理包含竖线的行的一种更快的非正则表达式方法是使用line.split('|'):

代码语言:javascript
复制
for line in ...:
   parts = line.split('|',1)
   if len(parts)==1: continue
   (code,mesg) = parts
票数 4
EN

Stack Overflow用户

发布于 2011-09-21 16:55:12

我还没有运行代码,但我怀疑regexp中alternative (|)后面的部分与任何以空格开头的非空字符串匹配,在本例中为" message"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7497048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档