2017-03-06 191 views
0

我正在寻找一个正则表达式,将从一个巨大的文本文件/文件中排除下面的单词。正则表达式不包含某些词

@author 
@Autowired 
@Override 
@param 
@SuppressWarnings 

我已经尝试过,但没有按预期工作。

@[^(author)(Autowired)(Override)(param)(SuppressWarnings)].* 
+0

为什么标记为'javascript'? – shmosel

+0

@Viswa shmosel有一个很好的观点......要正确回答这个问题,我们确实需要知道你使用的是什么语言。如果您正在编写一个Node.js程序来处理Java源代码,那么您应该只有“javascript”标记。如果你正在编写一个Java程序,你应该有“java”标签。它有所不同,因为有些语言支持正则表达式功能,而不是其他语言。 – ajb

回答

2

可以使用负前瞻:

@(?!author|Autowired|Override|param|SuppressWarnings)\S+ 

基本上,它寻找一个@而不是后跟该单词列表,然后它匹配之后的任何非空白字符。

+0

非常感谢,感谢您的帮助。 – Viswa

1

要翻转脚本,如果你实际上是试图把文本文件和删除事情是在你的关键字列表,你可能会想找到使用语法的更多类似这样的:@(author|AutoWired|Override|param|SuppressWarnings)\b。终端\b只是避免@权限或其他不可能性的预防措施。

1

正则表达式中的方括号用于字符类。当您将方括号中的字符列表放入时,其中一个字符就是列出的字符之一。所以

[author] 

匹配一个字符,如果是ahort,或者u。它不寻找单词author。在前面把^也寻找一个字符不在列表

[^author] 

一个字符,只要它不是ahort,或者u匹配。

但这里关键的是[]不能用于匹配单词或其他序列。在你的榜样,

@[^(author)(Autowired)(Override)(param)(SuppressWarnings)].* 

方括号中的第一部分字符不能匹配(au,或任何出现在方括号(其中许多人物多次出现其他字符,但这不会影响任何东西)。