How to match a line not containing a word
我想知道如何使用python样式的regex来匹配不包含特定单词的行(只使用regex,不涉及python函数)?
例子:
1 2
| PART ONE OVERVIEW 1
Chapter 1 Introduction 3 |
我要匹配不包含单词"part"的行?
谢谢和问候!
- 你准备用什么来做匹配?
- PART是否总是出现在开头?
- @大卫:只是澄清一下这个例子。
- @亚历克斯:不一定。
- 正确答案是^(?!.*PART).*$。如果需要整词检查,也可以使用^(?!.*\bPART\b).*$。或者,如果不需要整个字符串匹配,则从上述两个选项中删除.*$。
这应该有效:
如果你只想从一开始就把它排除在外(我知道你不,但只是FYI),你可以用这个:
编辑(按请求):此模式工作的原因
(?!...)语法是一种负面的前瞻性语法,我一直觉得很难解释。基本上,它的意思是"任何遵循这一点的内容都不能与正则表达式/PART/匹配。"我链接的站点比我能更好地解释这一点,但我将尝试将其分解:
1 2 3 4
| ^ #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).)*所做的就是逐字逐句地检查字符串,并将规则应用到所有字符串中。每个字符都可以是任何字符,但是如果您使用该字符以及其后的几个字符,则最好不要使用单词部分。
^和$锚定要求从头到尾将规则应用于整个字符串。如果没有这些锚,任何没有以部分开头的字符串都将是匹配的。即使是部分本身也会有匹配项,因为(例如)字母A后面没有确切的字符串部分。
因为我们有^和$,如果部分在字符串中的任何位置,那么其中一个字符将与(?=PART).匹配,并且整体匹配将失败。希望这足够清楚,有帮助。
- 对于我来说,我需要在另一个特定的单词2之前搜索没有特定单词1的行。所以我用了否定的方法:(?!
- 非常感谢您区分搜索行的开头和搜索整个行。你救了我一天。
- 我试着用这个来摆脱像"传感器风"这样的弦,但是/^(?!wind)。)*$/不起作用?
- @Killersnail-我没有足够的信息来帮助你;试着问一个单独的问题。
- 如果使用grep,则使用-p选项。例如grep-p"(?!不包含此字符串)'
- 投反对票的人愿意解释吗?