Grep正则表达式用于查找重复的单词,同时排除关键词列表。

29 浏览
0 Comments

Grep正则表达式用于查找重复的单词,同时排除关键词列表。

我有很多数据存储在一个目录中,我想找到不是数字的连续重复单词。我从这里开始:这里

\b(\w+) \1\b

然后我扩展它以包括我不想在结果中出现的内容:

(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b

当我将它作为Python表达式放入regex101中时,它可以工作(因为那是我熟悉的),但是在grep命令中使用时却不行。我意识到我不能使用!,所以在阅读了这个问题后,我尝试了这个:

 grep -Proh "\b(\w+) \1\b" | grep -Prohv "?(?:one|two|three|four|five|six|seven|eight|nine|oh|zero)"

结果返回"grep: nothing to repeat"。我不确定我是否使用了正确的grep参数,或者我使用的正则表达式有什么问题。

要匹配的示例数据:

今天评估可能性。怀疑是否发生了那个

要忽略的示例数据:

比重为一点零零七

0
0 Comments

原因:出现这个问题的主要原因是因为有一些关键词需要排除在查找重复单词的范围之外,但是在使用grep命令时没有正确地排除这些关键词。

解决方法:可以使用grep命令的-P或-oP参数,然后结合正则表达式来查找重复单词。在正则表达式中使用负向前瞻断言来排除关键词,例如(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))。然后使用\b(\w+) \1\b来查找重复的单词。通过这种方式,就可以找到重复的单词并排除关键词。

具体的解决方法如下所示:

$ grep -P '(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b' file
today to evaluate for possibilities. doubt that that is occurring
$ grep -oP '(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b' file
that that

这样就可以正确地查找到重复的单词,并且排除了关键词的影响。另外,还可以使用其他参数来使数据更加易于管理,添加这些参数不会导致问题出现。而出现问题的原因是单引号和双引号之间的区别,可能是由于比较自己的命令和对方的命令时没有正确地使用引号。

总结起来,通过使用grep命令的-P或-oP参数结合正则表达式,并在正则表达式中使用负向前瞻断言来排除关键词,就可以解决查找重复单词但排除关键词的问题。同时注意在比较命令时正确使用引号,避免出现问题。

0