C# .NET7中Regex无法匹配,如何提取字符串中的48,15?
正则匹配失败原因及提取48,15的解决方案
匹配失败的核心原因
原正则表达式末尾的\s强制要求匹配一个空格,但目标字符串"Sum km-ta 20% _48,15"的结尾是_48,15,没有后续空格,这是导致匹配失败的直接原因。正则中包含的(:)?这类不存在于目标字符串的可选分组,不会影响匹配结果,只是冗余内容。
解决方法
方法一:修正原正则表达式
去掉末尾的\s(或改为\s?以适配可能存在结尾空格的场景),保留原有分组逻辑:
var tekst = "Sum km-ta 20% _48,15"; var rida = Regex.Match(tekst, @"(?si)Sum(_)?(\skm-ta)?(\s)?(20%)?(:)?(\s)?(_)?(?<kmta>.*?)"); if (rida.Success) { Console.WriteLine(rida.Groups["kmta"].Value); // 输出:48,15 }
方法二:使用更简洁的正则直接提取
如果只需要提取_后的数字和逗号组合,可直接定位目标片段,避免冗余分组:
var tekst = "Sum km-ta 20% _48,15"; var match = Regex.Match(tekst, @"_([\d,]+)"); if (match.Success) { Console.WriteLine(match.Groups[1].Value); // 输出:48,15 }
如果字符串前缀固定(始终是Sum km-ta 20% ),也可以用更精准的正则:
var match = Regex.Match(tekst, @"Sum km-ta 20% _([\d,]+)");
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

