正则表达式查找不包含指定值的字符串

标签 regex string notepad++

我正在使用notepad++的正则表达式搜索功能来查找.txt文档中不包含特定值的所有字符串(下例中的HIJ),其中所有字符串都以相同的值开头(下例中的ABC) )。

我该如何去做呢?

示例

  • 每个字符串都以 ABC 开头
  • ABC 绝不会用在除开头以外的字符串中, ABCABC123 将是两个字符串——“ABC”和“ABC123”
  • HIJ 可能在字符串中出现多次
  • 我需要找到不包含 HIJ 的字符串
  • 输入是一个长文件,没有换行符,但包含特殊字符(*、^、@、~、:)和空格

输入示例:

ABC1234HIJ56ABC7@HIJABC89ABCHIJ0ABE:HIJABC12~34HI456J

示例输入将被视为以下字符串

ABC1234HIJ56
ABC7@HIJ
ABC89
ABCHIJ0ABE:HIJ
ABC12%34HI456J

第三个和第五个字符串都缺少“HIJ”,因此包含在输出中,所有其他字符串都不包含在输出中。

所需输出示例:

ABC89
ABC12~34HI456J

我对 RegEx 99% 都是新手,将来会更多地研究它,因为本周早些时候我的工作描述突然发生了变化,公司中的其他人突然离开,因此我一直通过搜索手动执行此操作( ABC|HIJ) 并浏览搜索功能的结果,查找连续出现两次的“ABC”。据说前雇员能够以自动方式完成此操作,但没有留下任何文档。

如有任何帮助,我们将不胜感激!

这个问题是我之前问过的问题的重复,但我在格式化问题方面非常非常糟糕,而且它似乎已经超出了明显的水平。

最佳答案

您可以通过以下方式找到您想要的项目:

ABC(?:[^HA]+|H(?!IJ)|A(?!BC))*+(?=ABC|$)

注意:在第一个模式中,您可以将 (?=ABC|$) 替换为 (?!HIJ)

图案详细信息:

ABC
(?:            # non-capturing group
    [^HA]+     # all that is not a H or an A
  |            # OR
    H(?!IJ)    # an H not followed by IJ
  |
    A(?!BC)    # an A not followed by BC
)*+            # repeat the group
(?=ABC|$)      # followed by "ABC" or the end of the string

注意:如果您想删除所有不是您想要的项目,您可以将此搜索替换为:

search: (?:ABC(?:[^HA]+|H(?!IJ)|A(?!BC))*+HIJ.*?(?=ABC|$))+|(?=ABC)
replace: \r\n

关于正则表达式查找不包含指定值的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298274/

相关文章:

java - 在 java 中比较字符串 compareTo

c++ - 访问字符串数组中的元素 0 会使其崩溃

ruby-on-rails - 在 Rails 中重构验证逻辑和正则表达式的最佳方法是什么?

c# - 带反向引用的正则表达式

python - 将字符串转换为整数的快速有效的方法

reference - 在 Notepad++ 中添加对 CS 脚本的引用

notepad++ - 记事本以及用于重新加载文件的快捷方式

regex - 使用 Notepad++ 中的正则表达式将科学记数法转换为文本或整数

python - 根据有趣单词的字典从电子邮件列表中识别最常见的单词

regex - 如何使用正则表达式禁止数字重复 n 次