gpt4 book ai didi

ruby - 具有命名捕获组的正则表达式在 Ruby 中获取所有匹配项

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:47 24 4
gpt4 key购买 nike

我有一个字符串:

s="123--abc,123--abc,123--abc"

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

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

是否有像 Python 的 findall 那样返回 matchdata 集合的 API?在这种情况下,我需要返回两个匹配项,因为 123abc 重复两次。每个匹配数据都包含每个命名捕获信息的详细信息,因此我可以使用 m['number'] 获取匹配值。

最佳答案

命名捕获只适用于一个匹配结果。
Ruby 的 findall 类比是 String#scan .您可以使用 scan 结果作为数组,或将 block 传递给它:

irb> s = "123--abc,123--abc,123--abc"
=> "123--abc,123--abc,123--abc"

irb> s.scan(/(\d*)--([a-z]*)/)
=> [["123", "abc"], ["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,123--abc,123--abc"

关于ruby - 具有命名捕获组的正则表达式在 Ruby 中获取所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com