关于正则表达式:如何匹配不包含单词的行

How to match a line not containing a word

本问题已经有最佳答案,请猛点这里访问。

我想知道如何使用python样式的regex来匹配不包含特定单词的行(只使用regex,不涉及python函数)?

例子:

1
2
PART ONE OVERVIEW 1
Chapter 1 Introduction 3

我要匹配不包含单词"part"的行?

谢谢和问候!


这应该有效:

1
/^((?!PART).)*$/

如果你只想从一开始就把它排除在外(我知道你不,但只是FYI),你可以用这个:

1
/^(?!PART)/

编辑(按请求):此模式工作的原因

(?!...)语法是一种负面的前瞻性语法,我一直觉得很难解释。基本上,它的意思是"任何遵循这一点的内容都不能与正则表达式/PART/匹配。"我链接的站点比我能更好地解释这一点,但我将尝试将其分解:

1
2
3
4
^         #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).)*所做的就是逐字逐句地检查字符串,并将规则应用到所有字符串中。每个字符都可以是任何字符,但是如果您使用该字符以及其后的几个字符,则最好不要使用单词部分。

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

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