我想知道如何使用Python风格的Regex匹配不包含特定单词的行(只使用Regex,不涉及Python函数)?
示例:
PART ONE OVERVIEW 1
Chapter 1 Introduction 3
我想匹配不包含单词“PART”的行?
谢谢和问候!
答案 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).
,整体匹配将会失败。希望足够清楚,有所帮助。