如何设置正则表达式以搜索最长的值?例如:
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"
答案 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