如何编写正则表达式以匹配包含XYZ但不包含ABC的文本?

时间:2009-01-15 18:43:01

标签: c# regex

我想写一个匹配的正则表达式,如果一个字符串包含XYZ但在它之前的某个地方不包含ABC。所以“等等XYZ blah”应该匹配,但“不要ABC等待XYZ等等”。

有什么想法吗?特别是我在c#中编写正则表达式,以防有任何特定于该语法的内容。

我想我可以使用负面的lookbehind但之前没有用过......

谢谢!

更新:我需要一个正则表达式,因为我没有能力修改代码,只是一些配置。

更新:改变了,因为我实际上只需要检查ABC在 XYZ之前没有出现,我不需要检查它是否到来。

6 个答案:

答案 0 :(得分:4)

^(?:(?<!ABC).)*XYZ

对我的小测试来说很好。

答案 1 :(得分:2)

有什么问题
 string.Contains("XYZ") && !string.contains("ABC") 

答案 2 :(得分:2)

无需外观:

^(?:(?!ABC).)*XYZ

答案 3 :(得分:0)

获取Expresso。我的观点是正则表达式难以掌握,无论如何你都想彻底测试它们,所以拥有一个可以帮助你两者的工具是最好的选择。它非常易于使用,有教程可供选择。

关于它的最好的事情:它将生成一大堆C#代码,其中包含你的正则表达式。

答案 4 :(得分:0)

应该做的诀窍:

^([^(ABC)]*)(XYZ)(.*)$

一些例子:

sadsafjaspodsa //False
sadABCdsaABCdsa //False
sadABCdsaABCdsaXYZ //False
sadABCdsaABCdsaXYZaa //False
sadABCddasABCsaXYZdsa //False
sadsaXYZdsa //True
sadsaXYZ //True

答案 5 :(得分:0)

这应该有效:

^(?:(?!ABC).{3,})?XYZ

如果它也不应出现在XYZ之后:

^(?:(?!ABC).{3,})?XYZ(?:.{3,}(?<!ABC))?$