正则表达式不包含某些单词[重复]
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]
匹配一个字符,如果它是a
、h
、o
、r
、t
或u
。它不查找单词author
。将^
放在前面也会查找列表中不的一个字符:
[^author]
匹配一个字符,只要它不是a
、h
、o
、r
、t
或u
。
但这里的关键是[]
不能用于匹配单词或其他序列。在您的示例中,
@[^(author)(Autowired)(Override)(param)(SuppressWarnings)].*
方括号中的部分匹配一个字符,该字符不是(
、a
、u
,或任何其他出现在方括号中的字符(其中许多字符出现多次,但这并不'不影响任何东西)。
【讨论】:
以上是关于正则表达式不包含某些单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章