我想知道如何使用Python风格的Regex匹配不包含特定单词的行(只使用Regex,不涉及Python函数)?
示例:
PART ONE OVERVIEW 1
Chapter 1 Introduction 3
我想要匹配不包含单词“PART”的行?
发布于 2011-06-07 08:37:33
这应该是可行的:
/^((?!PART).)*$/
如果您只想从行的开头排除它(我知道您不想,但仅供参考),您可以使用以下命令:
/^(?!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开头的部分都是匹配的。甚至部分本身也会有匹配项,因为(例如)字母A后面没有确切的字符串部分。
因为我们有^
和$
,所以如果PART在字符串中的任何位置,其中一个字符将与(?=PART).
匹配,并且整体匹配将失败。希望这足够清楚,对你有帮助。
https://stackoverflow.com/questions/6259443
复制相似问题