如何匹配不包含单词的行
我想知道如何使用Python风格的正则expression式匹配不包含特定单词的行(只要使用正则expression式,不涉及Python函数)?
例:
PART ONE OVERVIEW 1 Chapter 1 Introduction 3
我想匹配不包含单词“PART”的行吗?
感谢致敬!
这应该工作:
/^((?!PART).)*$/
如果你只是想把它排除在行首(我知道你没有,但只是FYI),你可以使用这个:
/^(?!PART)/
编辑(通过请求):为什么这个模式有效
(?!...)
语法是一个负面的预测 ,我总是很难解释。 基本上,这意味着“以下任何一点都不能与正则expression式/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)
看着前面的string,并说接下来的任何东西都不能匹配子模式/PART/
。 所以我们在做什么((?!xxx).)*
是逐字逐字地处理string,并将规则应用于所有的字符。 每个angular色都可以是任何东西,但是如果你把那个angular色和其后的几个angular色都拿走,最好不要把PART这个单词拿出来。
^
和$
锚在那里要求规则应用于整个string,从头到尾。 没有这些锚点的话,任何不以PART开头的string都是一个匹配。 即使PART本身也会有匹配,因为(例如)字母A没有紧跟在确切的stringPART之后 。
既然我们有^
和$
,如果PART在string中的任何位置,其中一个字符就会匹配(?=PART).
整体比赛将失败。 希望这是足够清楚的有用的。