首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >负面展望-如果找到单词,排除整个匹配?

负面展望-如果找到单词,排除整个匹配?
EN

Stack Overflow用户
提问于 2013-11-06 04:33:29
回答 2查看 1.4K关注 0票数 1

我试图解析文本日志,我只对文本的特定部分感兴趣。我认为我做的很好,直到我发现我无意中识别了部分。

假设我想匹配下面的部分。

第7节-交付终端诊断

它可能也会显示为

第7节.提供终端诊断

但我不想匹配任何东西,如果单词看到或下面在我的字符串前面,如下面。

见第7节.提供终端诊断

根据第7条提交。提供终端诊断

不应该与任何东西相匹配。

我试着用消极的眼光看,但它只排除了单词,它不会把整场比赛都扔出去。

代码语言:javascript
运行
复制
((?!see )Section[\s\\n]+7[\s+]+?[-:\\n\.]+?[\s+]+?(Delivering|Deliver)(.*terminal[\s+]+Diagnosis('s)?)?[\.]?)

我不认为我是正确地把握了环视的概念。帮助?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 06:43:01

试试下面的..。

对于用于匹配的任何情况,我都会在正则表达式前面使用rr是Python用于正则表达式模式和避免转义的原始字符串表示法,为了避免大写或小写查找的事实,使用re.I进行不区分大小写的匹配。

这里有一个可能的解决方案,使用双负查找。

代码语言:javascript
运行
复制
(?<!see)(?<!under)\s+(section 7[\s.:-]+(?:deliver(?:ing)?).*?terminal\s+diagnosis(?:'s)?)

请参阅live demo

例如,使用原始字符串表示法和re.I,这就是我的意思。

代码语言:javascript
运行
复制
matches = re.findall(r"(?<!see)(?<!under)\s+(section 7[\s.:-]+(?:deliver(?:ing)?).*?terminal\s+diagnosis(?:'s)?)", s, re.I)
print matches
票数 2
EN

Stack Overflow用户

发布于 2013-11-06 04:49:32

消极展望:指定在主表达式之后不能匹配的组。但在这之前你什么都没有。

使用负后视:

代码语言:javascript
运行
复制
(?<!see|under)

代替(?!see )

其他注释:您有一个大小写错误(终端应该是终端),如果您使用r(如r'my string' )前缀使整个字符串"raw“,则不需要像\n这样的双转义字符。

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

https://stackoverflow.com/questions/19804175

复制
相关文章

相似问题

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