正则表达式与命名捕获组获得所有匹配的Ruby

前端之家收集整理的这篇文章主要介绍了正则表达式与命名捕获组获得所有匹配的Ruby前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个字符串:
s="123--abc,123--abc,123--abc"

我试着使用Ruby 1.9的新功能“命名组”来获取所有命名组信息:

/(?<number>\d*)--(?<chars>\s*)/

有没有像Python的findall一样返回一个matchdata集合的API?在这种情况下,我需要返回两个匹配,因为123和abc重复两次。每个匹配数据包含每个命名的捕获信息的细节,因此我可以使用m [‘number’]获得匹配值。

命名捕获仅适用于一个匹配结果。
ruby的findall的模拟是 String#scan.你可以使用扫描结果作为数组,或传递一个块到它:
irb> s = "123--abc,123--abc"
=> "123--abc,123--abc"

irb> s.scan(/(\d*)--([a-z]*)/)
=> [["123","abc"],["123","abc"]]

irb> s.scan(/(\d*)--([a-z]*)/) do |number,chars|
irb*     p [number,chars]
irb> end
["123","abc"]
["123","abc"]
=> "123--abc,123--abc"

猜你在找的正则表达式相关文章