正则表达式 - 如果字符串中出现子字符串,则排除模式

4

问题: 我如何匹配一个特定的单词(这个单词是Find),同时忽略任何包含一个子字符串(这个子字符串是Exclude)的字符串?

我想做的就是找到所有包含单词Find的模式,并排除任何在字符串中包含Exclude的模式。

在模式匹配方面,我期望的是:

Find - Succeed
ExcludeFind - Fail
FineExclude - Fail
xxxFind - Succeed
Findxxx - Succeed
xxxFindxxx - Succeed
ExcludexxxxxxxxxxFind - Fail
FindxxxxxxxxxxExclude - Fail
ExcludexxxxxxxxxxFindxxxxxxxxxxExclude - Fail

我制作的正则表达式模式,根据结果的不同而变化,包括:
(\bFind\b) - Only works if Find is the only word
(\w?Find\w?) - Pattern matches any word with Find
((\w?Find\w?)([^Exclude])|([^Exclude])(\w?Find\w?)) - Image below

正则表达式问题

在查看了各种 Stack 帖子后,我尝试了更为复杂的方法,采用了 正向和反向界定 ,但它没有成功匹配任何模式。

(?<!Exclude)(Find)(?<=Exclude)

如果是 (?<!Exclude)(Find) 那么这个可以工作,但是只有两个问题 ExcludexxxxxxxxxxFindFindxxxxxxxxxxExclude 也会成功匹配,这是我不想要的,因为这些字符串包含了 "Exclude" 这个单词。
我认为使用通配符变量可能会起作用,例如 (?<!Exclude)?(Find) 或类似的东西,但是在这种情况下没有任何模式匹配。

基本问题:它必须是正则表达式吗?如果您正在使用编程语言,可能有其他更简单的方法。 - Andrew
顺便提一下,请检查您的第三个测试行是否为“Fine”,而不是“Find”。 - Andrew
1个回答

5
这似乎可以工作:
^(?!.*Exclude).*Find

这基本上是一个 Exclude 的负向前瞻,然后查找Find

它匹配4行:1、4、5和6。它不匹配"Find"后面的内容,但这可能不影响你。如果你需要匹配整个字符串,请改用以下代码,这样它也可以匹配之后的任何内容:
^(?!.*Exclude).*Find.*$

在这个问题的帮助下完成:

正则表达式包括某些单词但排除其他单词

我最初使用接受答案的正则表达式,只是替换了字符串并删除了斜杠,但我认为它仍然过于复杂,所以开始删除一些内容,这是我能想到的最小工作版本。


1
刚看到这个,但感谢你 Andrew - 完美地运行了。 - user9454269
1
@CarySwoveland,看起来他想匹配类似于“Findxxx”的内容,所以我没有包含任何边界。 - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接