为什么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
相关产品推荐
相关产品推荐

