C#,Regex& AND运算符

时间:2014-08-27 20:21:43

标签: c# regex

我正在尝试编写一个正则表达式,它将为包含字符" a"," b"的任何字符串生成匹配项。和" c"。它必须全部包含它们,但顺序并不重要。

"axbxcx" -> true
"cba" -> true
"cbx" -> false

我尝试了各种方法。

searchRegex = new Regex(("a")("b")("c"))
searchRegex = new Regex("a+b+c+")
searchRegex = new Regex([abc])

我尝试重构的代码是:

return input.Contains("0") && input.Contains("1") && input.Contains("a");

可以这样做吗?

格雷戈里

2 个答案:

答案 0 :(得分:3)

在使用正则表达式之前,请注意input.Contains("a") && input.Contains("b") && input.Contains("c")有效,更清晰,可能会提供更好的性能。

话虽如此,正则表达式(?=.*a)(?=.*b)(?=.*c).*对你有用。

它断言该字符串包含abc,一旦完成,它就会匹配任何内容。

答案 1 :(得分:1)

最快的方法是使用乱序正则表达式。
它比包含或纯前瞻快 3 倍。

(?:.*?(?=[abc])(?:(?(1)(?!))(a)|(?(2)(?!))(b)|(?(3)(?!))(c))){3}

 (?:
    .*? 
    (?= [abc] )
    (?:
       (?(1)(?!)) ( a )                         # (1)
     | (?(2)(?!)) ( b )                         # (2)
     | (?(3)(?!)) ( c )                         # (3)
    )
 ){3}