C#中的正则表达式问题用于构造新模式

时间:2015-06-30 06:13:35

标签: c# regex

我正在使用这个正则表达式

string expression = "q(\\d+)(M){0,1}(T){0,1}(W){0,1}(TH){0,1}(F){0,1}(S){0,1}(SU){0,1}";

考虑一周中的几天。

M, T, W, TH, F, S, SUN

每当我们输入任何字符串时,我们想要提取一周中的第一个模式并忽略另一个。

让我举个例子

  1. 如果输入字符串为:q10MTWTHFSSUN465689213MTWSU45454,则输出应为q10MTWTHFSSUN

  2. 输入字符串= q10MSSUN454545asdasdsaMTWTHUR 输出应为q10MSSUN

  3. CODE

        string expression = "q(\\d+)(M){0,1}(T){0,1}(W){0,1}(TH){0,1}(F){0,1}(S){0,1}(SU){0,1}";
        Console.Write("\nEnter string:");
        string value = Console.ReadLine();
        var result = Regex.Match(value, expression, RegexOptions.IgnoreCase);
    
        if (result != null)
        {
            Console.Write(result.ToString());
        }
    

    我尝试了上述模式,但在某些场景中失败了。

    FAILING SCENARIO

    输入字符串q10THSSUN454545asd

    输出应为q10THSSUN,但它会以q10T形式显示,因为TH

    Tuesday视为T

1 个答案:

答案 0 :(得分:1)

试试这个:

q(\\d+)(M){0,1}(T(?!H)){0,1}(W){0,1}(TH){0,1}(F){0,1}(S(?!U)){0,1}(SU){0,1}

用于匹配' T'的正则表达式如果下面的字母是' H' (以便TH优先)。周六和周日也一样。

为简洁起见,您也可以将{0,1}替换为?,但这只是一个偏好问题,真的。