Arrays 如何在数组中找到与正则表达式匹配的连续字符串?

Arrays 如何在数组中找到与正则表达式匹配的连续字符串?,arrays,ruby,regex,string,Arrays,Ruby,Regex,String,我正在使用Ruby 2.4。我想在字符串数组中找到与正则表达式匹配的连续标记。所以如果我的正则表达式是 /\p{L}/ 我的数组是 ["2917", "m", "neatty", "fff", "46", "u", "28", "56"] 我希望结果是 ["m", "neatty", "fff"] 但是,我的尝试失败了(请注意,“neatty”标记被重复) 如何在数组中找到与不重复的模式匹配的连续标记?如果r是您的正则表达式,则在chunk\u时使用 arr.chunk_while {

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

/\p{L}/
我的数组是

 ["2917", "m", "neatty", "fff", "46", "u", "28", "56"]
我希望结果是

["m", "neatty", "fff"]
但是,我的尝试失败了(请注意,“neatty”标记被重复)


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

如果
r
是您的正则表达式,则在
chunk\u时使用

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

您还可以在
时使用
slice\u查找绑定条件的子数组的边界:

> arr.slice_when {|x,y| !x[reg] || !y[reg] }.select {|e| e.length>1}
=> [["m", "neatty", "fff"]]
arr=[“2917”,“m”,“neatty”,“fff”,“46”,“u”,“28”,“56”,“hi”,“ya!”]
r=/\p{L}/

arr.each_with_object([[]]){s,a | s.match?(r)?(a.最后我假设“r”是我的正则表达式?这将返回一个数组数组,以便获得我想要的输出,我可以应用flatte吗?是
r
是你的正则表达式(抱歉,我将更新我的答案)。我将答案保留为二维数组,以防出现超过1组连续匹配。但是,如果您愿意,可以将其展平。请注意,除非我在评论中发布了问题(对于
[“1”、“m”、“m”、“2”、“m”]
输入的预期结果是什么?)是OP回答的,这个答案的正确性处于未定状态:)@mudasobwa:你如何看待
[“1”、“m”、“m”、“2”、“m”]
的歧义性?答案不是
[[“m”、“m”]]
?我想他指的是他使用
时得到的重叠
[“neatty”、“neatty”]
--由于该方法而创建了一个副本。我可能是错的。这是一个好问题,因为他的方法会从您的示例中产生
[“m”,“m”]
[“1”,“m”,“m”,“2”,“m”]
输入的预期结果是什么?
> arr.slice_when {|x,y| !x[reg] || !y[reg] }.select {|e| e.length>1}
=> [["m", "neatty", "fff"]]
arr = ["2917", "m", "neatty", "fff", "46", "u", "28", "56", "hi", "%ya!"]
r = /\p{L}/

arr.each_with_object([[]]) { |s,a| s.match?(r) ? (a.last << s) : a << [] }.
    reject { |a| a.size < 2 }
  #=> [["m", "neatty", "fff"], ["hi", "%ya!"]]