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

C#正则表达式问题:如何匹配首尾为1且中间含至少一个0的所有模式?

解决重叠的1开头结尾且中间含0的正则匹配问题

你遇到的问题是因为普通正则匹配会消耗已匹配的字符,导致重叠的匹配项被跳过。比如输入“101001000”,1(0)+1匹配完“101”后,匹配指针会跳到位置3,直接跳过了位置2的“1”,自然找不到后面的“1001”。

用正向先行断言就能解决这个问题,它属于零宽度断言,只检查后续字符是否符合规则,不会消耗任何字符,这样正则引擎可以逐个位置扫描所有可能的匹配。

正确的正则模式

string pattern = @"(?=(1(0+)1))";

代码示例

string input = "101001000";
foreach (Match match in Regex.Matches(input, pattern))
{
    // 通过Groups[1]提取完整的匹配内容
    Console.WriteLine(match.Groups[1].Value);
}

运行后会输出:

101
1001

正则原理说明

  • (?=...):正向先行断言,仅验证当前位置后方的字符是否符合括号内的模式,不移动匹配指针,也不消耗字符。
  • 1(0+)1:这是你原本要匹配的核心规则——以1开头、结尾,中间至少一个0,被包裹在先行断言中,通过捕获组Groups[1]来获取完整的匹配结果。

这样就能遍历到所有重叠的符合条件的字符串了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:39