我想写一个匹配的正则表达式,如果一个字符串包含XYZ但在它之前的某个地方不包含ABC。所以“等等XYZ blah”应该匹配,但“不要ABC等待XYZ等等”。
有什么想法吗?特别是我在c#中编写正则表达式,以防有任何特定于该语法的内容。
我想我可以使用负面的lookbehind但之前没有用过......
谢谢!
更新:我需要一个正则表达式,因为我没有能力修改代码,只是一些配置。
更新:改变了,因为我实际上只需要检查ABC在 XYZ之前没有出现,我不需要检查它是否到来。
答案 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))?$