You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Regex无法匹配全部16位数字问题求助

解决正则匹配连续重叠16位数字的问题

这问题我之前也踩过坑!你现在用的[0-9]{16}正则是非重叠匹配——当它匹配到前16位数字后,会直接跳过这16个字符,从第17位开始找下一个匹配,自然拿不到你想要的连续重叠结果(比如第1-16位、第2-17位、第3-18位...)。

解决方案:用正向预查实现重叠匹配

要获取所有连续的16位数字,你需要用正向预查(Positive Lookahead),它的特点是只检查当前位置后面是否符合规则,不会“消耗”匹配到的字符,这样正则引擎就能逐个字符往后检查,得到所有重叠的结果。

修改后的正则表达式是:(?=(\d{16}))

对应的C#代码示例

Regex ItemRegex = new Regex(@"(?=(\d{16}))");
string input = "564654564553314342340968580654";
int matchCount = 0;

foreach (Match itemMatch in ItemRegex.Matches(input))
{
    // 匹配结果存在捕获组1中
    string matchedValue = itemMatch.Groups[1].Value;
    if (!string.IsNullOrEmpty(matchedValue))
    {
        Console.WriteLine(matchedValue);
        matchCount++;
    }
}

Console.WriteLine($"总共匹配到 {matchCount} 个连续的16位数字");

原理说明

  • 正向预查(?=...)只是做一个“存在性检查”:确认当前位置后面有16位数字,但不会把这16位数字从输入字符串中移除。
  • 每次检查完成后,正则引擎会移动一个字符的位置,继续检查下一个位置后面是否有16位数字,这样就能得到所有从第1位开始、第2位开始...的连续16位数字组合。
  • 原来的[0-9]{16}会直接“吃掉”16个字符,导致下一次匹配从第17位开始,所以只能拿到非重叠的结果。

内容的提问来源于stack exchange,提问作者Missy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:25:52