首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何匹配不包含单词的行

如何匹配不包含单词的行
EN

Stack Overflow用户
提问于 2011-06-07 08:11:56
回答 1查看 120.4K关注 0票数 87

我想知道如何使用Python风格的Regex匹配不包含特定单词的行(只使用Regex,不涉及Python函数)?

示例:

代码语言:javascript
复制
PART ONE OVERVIEW 1 
Chapter 1 Introduction 3

我想要匹配不包含单词“PART”的行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-07 08:37:33

这应该是可行的:

代码语言:javascript
复制
/^((?!PART).)*$/

如果您只想从行的开头排除它(我知道您不想,但仅供参考),您可以使用以下命令:

代码语言:javascript
复制
/^(?!PART)/

编辑(通过请求):为什么此模式有效

(?!...)语法是一种negative lookahead,我一直觉得很难解释。基本上,它的意思是“这一点后面的任何内容都不能与正则表达式/PART/__匹配”。我所链接的站点对此的解释比我所能做的要好得多,但我会试着将其分解:

代码语言:javascript
复制
^         #Start matching from the beginning of the string.    
(?!PART)  #This position must not be followed by the string "PART".
.         #Matches any character except line breaks (it will include those in single-line mode).
$         #Match all the way until the end of the string.

((?!xxx).)*习惯用法可能是最难理解的。正如我们所看到的,(?!PART)查看前面的字符串,并表示无论下一步是什么,都无法匹配子模式/PART/。因此,我们对((?!xxx).)*所做的是逐个字母地检查字符串,并将规则应用于所有字符。每个字符可以是任何东西,但是如果你取这个字符和它后面的几个字符,你最好不要得到单词的部分。

^$锚点要求从头到尾将规则应用于整个字符串。如果没有这些锚点,字符串中任何不以PART开头的部分都是匹配的。甚至部分本身也会有匹配项,因为(例如)字母A后面没有确切的字符串部分。

因为我们有^$,所以如果PART在字符串中的任何位置,其中一个字符将与(?=PART).匹配,并且整体匹配将失败。希望这足够清楚,对你有帮助。

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

https://stackoverflow.com/questions/6259443

复制
相关文章

相似问题

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