为何Regex.Match匹配目标字符串的结果始终为false?
正则匹配失败的修正方案
你的正则匹配失败是因为正则表达式的格式和实际selectedKey字符串的结构完全不匹配,具体差异和修正方法如下:
问题点分析
- 实际字符串使用大括号
{}包裹内容,但你的正则里错误地写了小括号的转义\(和\) - 实际字符串中两个大括号块的分隔符是
,(逗号加空格),你的正则用\s+\(来匹配,完全不符合实际结构 - 正则开头未匹配字符串最前面的
{,结尾也未覆盖最后的}
修正后的正则与代码
修正后的正则会完全匹配{X=108,Y=104}, {Width=157, Height=164}这类格式:
var selectedKey = FileList.Keys.ElementAt(si); // 修正后的正则,适配实际的大括号结构和分隔符 Match match = Regex.Match(selectedKey, @"\{X=(\d+),Y=(\d+)\},\s+\{Width=(\d+),\s+Height=(\d+)\}"); if (match.Success) { // 提取捕获的数值示例 int x = int.Parse(match.Groups[1].Value); int y = int.Parse(match.Groups[2].Value); int width = int.Parse(match.Groups[3].Value); int height = int.Parse(match.Groups[4].Value); // 执行后续业务逻辑 }
正则说明
\{和\}:转义匹配实际字符串中的大括号(大括号在正则中属于特殊元字符,必须转义才能匹配字面量),\s+:匹配两个大括号块之间的逗号加任意数量的空白字符(\d+):依然用于捕获对应的数字值,和原正则逻辑一致
内容的提问来源于stack exchange,提问作者Sharper
相关产品推荐
相关产品推荐

