我想知道如何使用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).和整体匹配会失败.希望足够清楚,有所帮助.