我想命名的字符串,我从扫描捕获.怎么做?
"555-333-7777".scan(/(\d{3})-(\d{3})-(\d{4})/).flatten #=> ["555", "333", "7777"]
有没有可能变成这样
{:area => "555", :city => "333", :local => "7777" }
或
[["555","area"], [...]]
我试
"555-333-7777".scan(/((?<area>)\d{3})-(\d{3})-(\d{4})/).flatten
但它又回来了
[]
7条答案
按热度按时间txu3uszq1#
您应该将
match
用于命名捕获,而不是scan
如果你想要一个实际的哈希值,你可以使用这样的东西:
或者这个(ruby 2.4或更高版本)
km0tfn4u2#
像这样吗
奖励版本:
wdebmtf23#
如果你真的不需要哈希,而只是局部变量:
它是如何工作的?
=~
正则表达式运算符。string =~ regex
,它就不工作了。named_captures
相同的语法?<var>
。正式文件:
当命名的捕获组与表达式左侧的文字regexp和=~运算符一起使用时,捕获的文本也被分配给具有相应名称的局部变量。
eqoofvh94#
将捕获组名称及其值转换为散列的一种方法是使用正则表达式和使用
(?<capture_name>
命名的捕获,然后访问%~
全局“last match”变量。pnwntuvh5#
这种替代方案也适用:
fxnxkyjh6#
有很多方法可以创建命名捕获,其中许多已经提到过。不过,为了记录在案,我们甚至可以像这样使用最初发布的代码沿着
Multiple Assignment
:或
沿着与
zip
或to_h
(可选):lstz6jyr7#
新的
symbolize_names: true
选项可用于Ruby 3.3+中的MatchData#named_captures
如果关键字参数
symbolize_names
被赋予true值,则结果散列中的键为Symbols