如何匹配不包含单词的行

Tim*_*Tim 80 regex

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

例:

PART ONE OVERVIEW 1 
Chapter 1 Introduction 3
Run Code Online (Sandbox Code Playgroud)

我想匹配不包含单词"PART"的行?

感谢致敬!

Jus*_*gan 144

这应该工作:

/^((?!PART).)*$/
Run Code Online (Sandbox Code Playgroud)

如果你只是想从行的开头排除它(我知道你没有,但只是FYI),你可以使用这个:

/^(?!PART)/
Run Code Online (Sandbox Code Playgroud)

编辑(按要求):为什么这种模式有效

(?!...)语法是负先行,这是我一直觉得很难解释.基本上,它意味着"此后的任何内容都必须与正则表达式不匹配" /PART/.我链接的网站解释得比我好,但我会试着打破这个:

^         #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.
Run Code Online (Sandbox Code Playgroud)

这个((?!xxx).)*成语可能最难理解.正如我们所看到的那样,(?!PART)查看前面的字符串,并说接下来的任何内容都与子模式不匹配/PART/.所以我们正在做的((?!xxx).)*是逐个字母地输入字符串并将规则应用于所有这些字符串.每个字符可以是任何东西,但如果你把这个角色和之后接下来的几个字符,你最好不要让这个词PART.

^$锚有要求该规则适用于整个字符串,从开始到结束.没有这些锚点,任何不以PART开头的字符串都是匹配的.即使PART本身也会有匹配,因为(例如)字母A后面没有精确的字符串PART.

因为我们确实有^$,如果部分是在字符串中的任何地方,其中一个字符将匹配(?=PART).和整体匹配会失败.希望足够清楚,有所帮助.

  • 对我来说,我需要在另一个特定的单词-word2之前搜索没有特定单词-word1的行.所以我使用负面的lookbehind:(?!<word1)word2花了我很长时间才使它工作. (2认同)