繁体   English   中英

仅从正则表达式中的组中获取最长的匹配项

[英]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+)?

正则表达式演示| C# 演示

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM