正则表达式不包含某些单词[重复]

Posted

技术标签:

【中文标题】正则表达式不包含某些单词[重复]【英文标题】:Regex does not contain certain words [duplicate] 【发布时间】:2017-07-25 18:52:16 【问题描述】:

我正在寻找一个正则表达式,它将从一个巨大的文本文件中排除以下单词。

@author
@Autowired
@Override
@param
@SuppressWarnings

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

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

【问题讨论】:

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

尝试使用以下正则表达式(使用negative look-ahead)

@(?!author|Autowired|Override|param|SuppressWarnings).*

regex demo / explanation

【讨论】:

siam:非常感谢,感谢您的帮助。【参考方案2】:

您可以使用否定前瞻:

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

基本上,它会查找 not 后跟该单词列表的 @,然后匹配之后的所有非空白字符。

【讨论】:

非常感谢,感谢您的帮助。【参考方案3】:

要翻转脚本,如果您实际上是在尝试获取文本文件并删除关键字列表中的内容,您可能希望找到使用更像这样的语法的内容:@(author|AutoWired|Override|param|SuppressWarnings)\b。终端\b 只是为了避免@authority 或其他可能性的预防措施。

【讨论】:

【参考方案4】:

正则表达式中的方括号用于字符类。当您将字符列表放在方括号中时,这将匹配 一个字符,它是列出的字符之一。所以

[author]

匹配一个字符,如果它是ahortu。它不查找单词author。将^ 放在前面也会查找列表中的一个字符:

[^author]

匹配一个字符,只要它不是ahortu

但这里的关键是[] 不能用于匹配单词或其他序列。在您的示例中,

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

方括号中的部分匹配一个字符,该字符不是(au,或任何其他出现在方括号中的字符(其中许多字符出现多次,但这并不'不影响任何东西)。

【讨论】:

以上是关于正则表达式不包含某些单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式包含某字符串且不包含某些字符串

正则表达式包含某字符串且不包含某些字符串

正则表达式 - 匹配任何单词但忽略特定单词[重复]

book_精通正则表达式

仅当内容具有某些单词时,正则表达式才删除括号和内部内容

正则表达式 - 匹配整个字符串,除非 [重复]