小编bli*_*lid的帖子

将MatchData中的命名匹配转换为Hash

我有一个相当简单的正则表达式,但我想使用命名正则表达式使其更清晰,然后迭代结果.

测试字符串:

testing_string = "111x222b333"
Run Code Online (Sandbox Code Playgroud)

我的正则表达式:

regexp = %r{
                (?<width> [0-9]{3} ) {0}
                (?<height> [0-9]{3} ) {0}
                (?<depth> [0-9]+ ) {0}

                \g<width>x\g<height>b\g<depth>
            }x
dimensions = regexp.match(testing_string)
Run Code Online (Sandbox Code Playgroud)

这项工作就像一个魅力,但问题来自何处:

dimensions.each { |k, v| dimensions[k] = my_operation(v) }

# ERROR !

 undefined method `each' for #<MatchData "111x222b333" width:"111" height:"222" depth:"333">.
Run Code Online (Sandbox Code Playgroud)

没有.each在MatchData对象中的方法,我真的不想修补它.

我该如何解决这个问题?

我不像我想的那么清楚:重点是保持名称和类似哈希的结构.

ruby regex hash

20
推荐指数
2
解决办法
6526
查看次数

标签 统计

hash ×1

regex ×1

ruby ×1