[英]Get only the longest match from the groups in regex
我有各种字符串,如“10001110110”、“10000”、“100001”、“00011”、“0001”、“111000”等。
我需要找出最长的可能组合 1 之间没有或 1 个零。
我有一个像这样的正则表达式 - (?=(1+01+))
但它不会返回一个没有前导或尾随的组。
我也想用正则表达式来考虑这种情况。
目前它返回所有组,例如。 如果输入字符串是 '10110111' 它返回 3 个组
{null, 1011}
, {null, 110111}
和{null, 10111}
我希望我的正则表达式只返回 1 个具有最长组合的匹配项。 有可能这样做吗?
谢谢, 阿卡纳
您不需要前瞻来匹配:
我需要找出最长的可能组合 1 之间没有或 1 个零。
您可以匹配 1 次或多次 1,然后可选择匹配 0,然后再匹配 1 次或多次 1。
1+(?:0?1+)?
要获得最长的结果,可以处理匹配项,然后按字符串的长度排序,然后从集合中获取第一个结果。
string pattern = @"1+(?:0?1+)?";
string input = @"10001110110 10000 100001 00011 0001 111000";
var result = Regex.Matches(input, pattern)
.Select(m => m.Value)
.OrderByDescending(s => s.Length)
.FirstOrDefault();
Console.WriteLine(result);
输出
111011
如果要匹配零个或多个重复:
1+(?:0?1+)*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.