我有各种字符串,如'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