我正在使用notepad ++的正则表达式搜索函数来查找.txt文档中不包含特定值的所有字符串(以下示例中的HIJ),其中所有字符串都以相同的值开头(以下示例中的ABC) )。
我将如何做到这一点?
实施例
示例输入:
ABC1234HIJ56ABC7@HIJABC89ABCHIJ0ABE:HIJABC12~34HI456J
示例输入将被视为以下字符串
ABC1234HIJ56
ABC7@HIJ
ABC89
ABCHIJ0ABE:HIJ
ABC12%34HI456J
第三和第五个字符串都缺少“HIJ”,因此包含在输出中,所有其他字符串都不包含在输出中。
示例所需输出:
ABC89
ABC12~34HI456J
我是RegEx的新手99%,并且将来会更多地关注它,因为我的工作描述本周早些时候突然改变了,当时公司的其他人突然离开,因此我一直在通过搜索手动执行此操作( ABC | HIJ)并查看搜索功能的结果,查找“ABC”连续出现两次。据说这位前雇员能够以自动方式完成这项工作,但没有留下任何文件。
任何帮助将不胜感激!
这个问题是我提出的先前问题的重复,但我在格式化问题方面非常糟糕,而且它似乎已经超出了明显的水平。
答案 0 :(得分:2)
您可以找到所需的项目:
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
答案 1 :(得分:0)
您可以使用以下表达式来匹配您的标准:
(^ABC(?:(?!HIJ).)*$)
这从ABC开始并向前看(负)HIJ模式。该模式适用于分离的字符串。
对于单行模式(在您的问题中提供),稍作修改(如下):
(ABC(?:(?!HIJ).)*?)(?=ABC|$)
答案 2 :(得分:0)
你可以使用这种模式
(ABC(?:(?!HIJ).)*?)(?=ABC|\R)
( # Capturing Group (1)
ABC # "ABC"
(?: # Non Capturing Group
(?! # Negative Look-Ahead
HIJ # "HIJ"
) # End of Negative Look-Ahead
. # Any character except line break
) # End of Non Capturing Group
*? # (zero or more)(lazy)
) # End of Capturing Group (1)
(?= # Look-Ahead
ABC # "ABC"
| # OR
\R # <line break>
) # End of Look-Ahead