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

为什么C#正则匹配多行字符串时无法获取Regex分组值?

问题原因

  • 你编写的正则存在语法冗余:第一个捕获规则末尾多写了多余的],和实际输入文本无法匹配
  • 默认正则匹配不支持跨行识别,两个目标内容分布在不同行,你用\s*只能匹配连续空白,无法处理行之间的其他字符、换行符
  • 捕获规则可以进一步优化,直接提取需要的数值,不需要将target1 = 这类前缀也纳入捕获结果

修复后的代码

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var item = " john smith (ABCDEFG) <js@email.com>\n" + 
            "target1 = 3333, j\n" + 
            "target2 1111, ";
        // 内联(?s)开启单行匹配模式,让.可以匹配换行符,.*匹配两个目标之间的任意间隔内容
        var pattern = @"(?s).*target1 = (?<target1>\w+).*target2 (?<target2>\w+)";
        var m = Regex.Match(item, pattern);
        if (m.Success)
        {
            Console.WriteLine("1: {0}", m.Groups["target1"].Value);
            Console.WriteLine("2: {0}", m.Groups["target2"].Value);
        }
    }
}

运行输出

1: 3333
2: 1111

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:04