我正在使用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/