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没有真正的帮助。