只从regex中的组中获取最长的匹配

  • 本文关键字:regex 只从 获取 c# regex
  • 更新时间 :
  • 英文 :


我有各种字符串,如'10001110110','10000','100001','00011','0001','111000'等。

我需要找出0和0之间最长的1的组合

我有一个像这样的正则表达式-(?=(1+01+))

但是它不会返回一个没有开头或结尾的组

我希望正则表达式也考虑这种情况。

当前返回所有组如。如果输入字符串为'10110111',则返回3组

{null, 1011},{null, 110111}{null, 10111}

我希望我的正则表达式只返回1匹配与最长的组合。这可能吗?

对于以下规则:

我需要找出1和0之间最长的组合

您可以捕获1+乘以1,然后在前瞻性断言中选择匹配0,然后再匹配1+乘以1

(?=(1+(?:0?1+)?))

Regex demo | c# demo

要获得最长的结果,您可以处理匹配,然后按字符串的长度排序,然后从集合中获得第一个结果。

string pattern = @"(?=(1+(?:0?1+)?))";
string input = @"10001110110 10000 100001 00011 0001 111000 101110111011011";
var result = Regex.Matches(input, pattern)
.Select(m => m.Groups[1].Value)
.OrderByDescending(s => s.Length)
.FirstOrDefault();
Console.WriteLine(result);

输出
1110111

最新更新