C#regex for既不包含这个也包含它

时间:2015-01-29 13:10:07

标签: c# regex

我尝试在C#中创建一个正则表达式,只允许字符串超过3个字符但是如果它以' sch'它应该具有6的最小长度,并且如果它始于' st'或者' ch'它应该具有最小长度5。

第二部分是轻松的,但第一部分(所有其他部分长度为3)更复杂:

"(^(SCH).{3})|(^(ST).{3})|(^(CH).{3})|^(!SCH).{3}"

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

好像你想要这样的东西,

@"^SCH.{3,}|^(?:ST|CH).{3,}|^(?!S?CH|ST).{3,}"
{3,}中的

.{3,}会重复上一个.匹配任何字符)3次或更多次的令牌。

DEMO

^(?!S?CH|ST).{3,}如果字符串不以SCHSTCH开头,则仅在字符串至少包含三个字符时匹配这些字符串。

答案 1 :(得分:2)

我个人不会使用正则表达式。只需使用标准的string操作。

bool IsValid(string str)
{
    if(str.StartsWith("st") || str.StartsWith("ch"))
        return str.Length >= 5;
    if(str.StartsWIth("sch"))
        return str.Length >= 6;
    return str.Length > 3;
}