我用的是ruby 2.4。我想在字符串数组中找到与正则表达式匹配的连续标记。如果我的regex是

/\p{L}/

我的阵型是
 ["2917", "m", "neatty", "fff", "46", "u", "28", "56"]

我希望结果是
["m", "neatty", "fff"]

但是,我的尝试失败了(请注意,“neatty”标记被重复了)。
2.4.0 :020 > arr = ["2917", "m", "neatty", "fff", "46", "u", "28", "56"]
 => ["2917", "m", "neatty", "fff", "46", "u", "28", "56"]
2.4.0 :021 > arr.each_cons(2).select{|pair| pair.all?{|elem| elem =~ /\p{L}/ }}.flatten
 => ["m", "neatty", "neatty", "fff"]

如何在数组中找到与同样不重复的模式匹配的连续标记?

最佳答案

如果r是您的正则表达式,则使用chunk_while

arr.chunk_while { |a,b| a[r] && b[r] }.select { |arr| arr.size > 1 }
 #=> [["m", "neatty", "fff"]]

10-06 08:36