ruby - 如何在 ruby​​ 中进行命名捕获

标签 ruby regex

我想命名从扫描中获取的字符串捕获。怎么做?

"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

但它返回

[]

最佳答案

您应该对命名捕获使用match,而不是scan

m = "555-333-7777".match(/(?<area>\d{3})-(?<city>\d{3})-(?<number>\d{4})/)
m # => #<MatchData "555-333-7777" area:"555" city:"333" number:"7777">
m[:area] # => "555"
m[:city] # => "333"

如果你想要一个实际的散列,你可以使用这样的东西:

m.names.zip(m.captures).to_h # => {"area"=>"555", "city"=>"333", "number"=>"7777"}

或者这个(ruby 2.4 或更高版本)

m.named_captures # => {"area"=>"555", "city"=>"333", "number"=>"7777"}

关于ruby - 如何在 ruby​​ 中进行命名捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18825669/

相关文章:

ruby-on-rails - Devise 是否与 ruby​​ on rails 3.1 完全兼容?它似乎可以工作,但缺少几个文件

ruby-on-rails - 如何将字符串拆分为二维数组并将运算符应用于 Rails 3.2 中的数组元素?

ruby - 在 RubyMine "Jetbrains"IDE 中重命名文件时遇到问题

java - 在文本字符串中添加 URL 链接,Java

javascript - 正则表达式确定 URL 视频 ID

ruby-on-rails - 如何使用 Ruby 更改 MIME 类型

ruby - 如何使用另一个字符串在 Ruby 中切掉一个字符串?

python - 如何使用 Python 或正则表达式在引号中获取对话行?

java - 仅当所有字符串都被引用时才用于拆分的正则表达式

圆括号中的 Java 正则表达式