Regex 从正则表达式中排除字符串
是否有方法仅从文本文件中选择排除子字符串的行?例如,我有以下文件:Regex 从正则表达式中排除字符串,regex,Regex,是否有方法仅从文本文件中选择排除子字符串的行?例如,我有以下文件: I have a /apple I have a peach I have a cucumber/strawberry ABCDE I have a apple/grape XYZEF POLSD 我想选择以“i have a”开头的行,但不包括字符串“apple”。因此基本上我只想选择: I have a peach I have a cucumber/strawberry 您应该使用带有多行标志的正则表达式“start
I have a /apple
I have a peach
I have a cucumber/strawberry
ABCDE
I have a apple/grape
XYZEF
POLSD
我想选择以“i have a”开头的行,但不包括字符串“apple”。因此基本上我只想选择:
I have a peach
I have a cucumber/strawberry
您应该使用带有多行标志的正则表达式“start with”,如下所示: “^我有一个。*”/gm使用管道:
grep '^I have a' file.txt | grep -v apple
使用消极的前瞻
^I have a (?!.*\bapple\b).+
将匹配所有“I have a”字符串,但包含整个单词“apple”的字符串除外。这仍然与短语匹配
I have a pineapple
由于“apple”周围的单词边界,对于纯正则表达式解决方案,您可以使用以下内容:
^我有一个(?。*apple)
-注意:如果你不想匹配像“菠萝”这样的东西,你也可以像Jongware建议的那样,在“apple”周围添加\b
单词边界
然而,一种更简单的方法(特别是当问题稍微复杂一点时!)是将搜索第一个模式与搜索排除第二个模式相结合
按照Danny Daglas的建议,使用grep
,您可以执行grep'^I有一个'file.txt | grep-v apple
(其中grep-v
是一个“反向grep”)
但是,您希望在文本编辑器中执行此操作,这很公平。文本编辑器之间的确切方法明显不同,但例如Vim check out r.什么应用程序或编程语言?如果您使用的是
grep
,它有一个-v
选项,可以打印不匹配的行。更一般地说,您可以使用负前瞻。我想您可能误解了这个问题,因为这对OP没有真正的帮助。