grepWin:查找这个而不是那个(搜索一个有字符串但没有其他字符串的页面)



我正试图通过grepWin for Win 10(2.0.13版)找到有特定单词但同时缺少另一个单词的文件;点匹配换行符";没有,但它仍然显示了错误的结果(请在问题末尾找到示例文件内容)。

我尝试了很多正则表达式,但它们只适用于同一行(在np++中),而不是整个文件。

^(?!.*not).*yes.*$→这会找到文件(1)、(3)、(4)

(?=.*yes)(?!.*not)(.+)→这会找到文件(1)、(3)、(4)

^(?!.[sS]*not).[sS]*yes.*$→这会找到文件(1),(4)

我需要的是找到有某个单词(例如:是)而不是另一个单词(如:不是)的文件。因此,如果文件中的两个单词都没有显示在结果中(类似于两步反向搜索),它只显示包含主要单词的文件,如果存在另一个单词,它就不会显示在搜索结果中。


假设我们有4个文本文件,(1)其中一个只包含单词yes[(2)(3)[第三个文件都先包含yes2(4)1第四个文件都首先包含not

我只想找到只有yes的文件[文件号(1),在下面的例子中是yes.txt]。

以下是四个文件:

(1)yes.txt

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。Duis aute irure dolor in reprechenderit in volupate velit esse cillum dolore eu fugiat nulla pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。只有是的,Duis aute irure dolor在reprechenderit的volupate velit esse cillum dolore eu fugiat nula pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。


(2)不是.txt

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。Duis aute irure dolor in reprechenderit in volupate velit esse cillum dolore eu fugiat nulla pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor只是不包括labore和dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。Duis aute irure dolor in reprechenderit in volupate velit esse cillum dolore eu fugiat nulla pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。


(3)both-a.txt

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。这是一个很好的例子。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor not incidicount ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。Duis aute irure dolor in reprechenderit in volupate velit esse cillum dolore eu fugiat nulla pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。


(4)both-b.txt

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。这是一个非常重要的问题。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。

Lorem ipsum dolor坐amet,consectetur adipiscing elit,sed do eiusmod tempor yes incidicount ut labore et dolore magna aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。Duis aute irure dolor in reprechenderit in volupate velit esse cillum dolore eu fugiat nulla pariatur。除非你偶尔会犯下不利于他人的罪行,否则你就不会因为疏忽大意而受到惩罚。

这个正则表达式对我有效(假设它们实际上应该是单词,因为您的尝试正则表达式根本没有考虑到这一点):

A(?!.*bnotb).*byesb

移植:

  • A-匹配整个字符串的开头(注意,通常grepWin在多行模式下匹配,所以^不能很好地与not不匹配)
  • (?!.*bnotb)-否定前瞻,以排除前面有任何内容的可能的not匹配。b用于将其标记为单词
  • .*byesb-与上面的情况类似,只是它只是正常匹配yes

Ofc应该与";点匹配换行符";选项

最新更新