如何匹配不包含单词的行

时间:2011-06-07 00:11:56

标签: regex

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

示例:

PART ONE OVERVIEW 1 
Chapter 1 Introduction 3

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

谢谢和问候!

1 个答案:

答案 0 :(得分:136)

这应该有效:

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

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

/^(?!PART)/

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

(?!...)语法是negative lookahead,我总是很难解释。基本上,它意味着“此后的任何内容都不能与正则表达式/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.

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

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

由于我们确实有^$,如果 PART 在字符串中的任何位置,其中一个字符将匹配(?=PART).,整体匹配将会失败。希望足够清楚,有所帮助。