【问题标题】: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”标签。之所以有所不同,是因为某些语言支持正则表达式功能,而其他语言则不支持。

标签: javascript java regex


【解决方案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,或任何其他出现在方括号中的字符(其中许多字符出现多次,但这并不'不影响任何东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多