为什么regexp找不到匹配

xxslljrj  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(213)

密码

var tekst = "Sum km-ta 20% _48,15";
var rida = Regex.Match(tekst, @"(?si)Sum(_)?(\skm-ta)?(\s)?(20%)?(:)?(\s)?(_)?(?<kmta>.*?)\s", RegexOptions.Singleline);

找不到数学。看起来RegExp是正确的,但由于未知原因未找到sum。如何获得匹配48,15?
在.NET 7中使用C#

3duebb1j

3duebb1j1#

问题是kmta组是惰性的,所以空匹配是可以的。您可以尝试限制组内允许的内容并消除惰性,字符串-(?si)Sum(_)?(\skm-ta)?(\s)?(20%)?(:)?(\s)?(_)?(?<kmta>[\d,\.]*)(\s)?的末尾也没有不可见字符:

var tekst = "Sum km-ta 20% _48,15";
var rida = Regex.Match(tekst, @"(?si)Sum(_)?(\skm-ta)?(\s)?(20%)?(:)?(\s)?(_)?(?<kmta>[\d,\.]*)(\s)?", RegexOptions.Singleline);
var ridaGroup = rida.Groups["kmta"].Value; // 48,15

你也可以去掉惰性,让\s成为可选的:(?si)Sum(_)?(\skm-ta)?(\s)?(20%)?(:)?(\s)?(_)?(?<kmta>.*)\s?

相关问题