正则表达式 - 最长的可能值

时间:2014-01-01 21:06:34

标签: c# regex

如何设置正则表达式以搜索最长的值?例如:

Regex.Match("theValue","(the|theValue)"); // this return "the", but "theValue" is longer match, and it can match too

Regex.Match("the Value","(the|the Value)"); // return "the", not "the Value"
Regex.Match("the Value","[t]?[h]?[e]?"); // return "t", not longer "the"

3 个答案:

答案 0 :(得分:3)

将您的模式更改为

\b(the|theValue)\b

或更新的样本

\b(the Value|the)\b

  

以及theValue

将匹配“the”(左边第一个)和“theValue”(末尾)。

示例:

static class Program
{
    static void Main(string[] args)
    {
        var str = "the and also theValue";
        var pattern = @"\b(the|theValue)\b";

        foreach (Match match in Regex.Matches(str, pattern))
        {
            Console.WriteLine(match.Value);
        }


        Console.ReadKey();
    }
}

输出:

  


  theValue

答案 1 :(得分:1)

您无法获得重叠匹配,您的第一个交替模式the会导致第二个无法匹配(输入字符串中的the已被占用)。

如果你想要尽可能长的匹配,你应该从最长的模式开始:"(theValue|the)"

btw Regex.Match只返回1个匹配项,如果你想要一个可以按长度排序的集合,你应该使用Regex.Matches

答案 2 :(得分:0)

theValue先来。

Regex.Match("theValue","(theValue|the)"); // returns theValue

Regex.Match("the Value","(theValue|the)"); // returns the