我想获得索引以及扫描结果
"abab".scan(/a/)
Run Code Online (Sandbox Code Playgroud)
我不仅想要
=> ["a", "a"]
Run Code Online (Sandbox Code Playgroud)
还有那些比赛的索引
[1, 3]
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
Tod*_*ell 23
试试这个:
res = []
"abab".scan(/a/) do |c|
res << [c, $~.offset(0)[0]]
end
res.inspect # => [["a", 0], ["a", 2]]
Run Code Online (Sandbox Code Playgroud)
根据您的预期行为,这里有一个值得关注的问题.
如果搜索/dad/
中"dadad"
你只能得到[["dad",0]]
,因为scan
预付款每场比赛结束的时候找到一个(这是我错了).
我提出了这个选择:
def scan_str(str, pattern)
res = []
(0..str.length).each do |i|
res << [Regexp.last_match.to_s, i] if str[i..-1] =~ /^#{pattern}/
end
res
end
Run Code Online (Sandbox Code Playgroud)
如果你想要,你也可以使用标准库中的StringScanner做类似的事情,对于长字符串来说可能会更快.