Ruby 如何使用字符串#按数字长度使用正则表达式扫描,并保留奇数余数作为元素

Ruby 如何使用字符串#按数字长度使用正则表达式扫描,并保留奇数余数作为元素,ruby,regex,Ruby,Regex,我希望以三为单位分隔字符串,但也将余数作为单独的元素 def separate(string) string.scan(/\w{3}/) end 因此,如果我传入“benime”,我希望它返回[BEN][ISM],然后返回[E] 我知道有一个简单的答案,但就我个人而言,我就是想不出来!要返回剩余的E,我需要添加什么 def separate(string) string.scan(/\w{1,3}/) # => ["BEN", "ISM", "E"] end 基本上,{n,m}

我希望以三为单位分隔字符串,但也将余数作为单独的元素

def separate(string)
  string.scan(/\w{3}/)
end
因此,如果我传入“benime”,我希望它返回[BEN][ISM],然后返回[E] 我知道有一个简单的答案,但就我个人而言,我就是想不出来!要返回剩余的E,我需要添加什么

def separate(string)
  string.scan(/\w{1,3}/) # => ["BEN", "ISM", "E"]
end
基本上,
{n,m}
在regexen中的意思是“在
n
m
之间的任意次数”

这将始终使用它可以使用的最大字符数(如果可能,它将始终提供三个字符),因为正则表达式是“贪婪的”,并且总是尝试使用尽可能多的字符。除非使用非贪婪修饰符,如下所示:

string.scan(/\w{1,3}?/) # => ["B", "E", "N", "I", "S", "M", "E"]
基本上,
{n,m}
在regexen中的意思是“在
n
m
之间的任意次数”

这将始终使用它可以使用的最大字符数(如果可能,它将始终提供三个字符),因为正则表达式是“贪婪的”,并且总是尝试使用尽可能多的字符。除非使用非贪婪修饰符,如下所示:

string.scan(/\w{1,3}?/) # => ["B", "E", "N", "I", "S", "M", "E"]
基本上,
{n,m}
在regexen中的意思是“在
n
m
之间的任意次数”

这将始终使用它可以使用的最大字符数(如果可能,它将始终提供三个字符),因为正则表达式是“贪婪的”,并且总是尝试使用尽可能多的字符。除非使用非贪婪修饰符,如下所示:

string.scan(/\w{1,3}?/) # => ["B", "E", "N", "I", "S", "M", "E"]
基本上,
{n,m}
在regexen中的意思是“在
n
m
之间的任意次数”

这将始终使用它可以使用的最大字符数(如果可能,它将始终提供三个字符),因为正则表达式是“贪婪的”,并且总是尝试使用尽可能多的字符。除非使用非贪婪修饰符,如下所示:

string.scan(/\w{1,3}?/) # => ["B", "E", "N", "I", "S", "M", "E"]

为什么要使用正则表达式呢?您可以在字符数组上执行
每个\u片段

def separate(string)
  string.chars.each_slice(3).map(&:join).to_a
end

为什么要使用正则表达式呢?您可以在字符数组上执行
每个\u片段

def separate(string)
  string.chars.each_slice(3).map(&:join).to_a
end

为什么要使用正则表达式呢?您可以在字符数组上执行
每个\u片段

def separate(string)
  string.chars.each_slice(3).map(&:join).to_a
end

为什么要使用正则表达式呢?您可以在字符数组上执行
每个\u片段

def separate(string)
  string.chars.each_slice(3).map(&:join).to_a
end


如果字符串包含非单词(非
A-Z A-Z 
)字符,该怎么办?此外,您还必须添加
.map(&:join)
以获取输出中的字符串而不是字符数组。关于如何处理非单词字符,要求不明确。我的回答纯粹回答了如何将一个字符串分成三块的问题。该示例建议将其用于单字字符串。如果该字符串包含非单词(非
A-Z A-Z 
)字符,该怎么办?此外,您还必须添加
.map(&:join)
以获取输出中的字符串而不是字符数组。关于如何处理非单词字符,要求不明确。我的回答纯粹回答了如何将一个字符串分成三块的问题。该示例建议将其用于单字字符串。如果该字符串包含非单词(非
A-Z A-Z 
)字符,该怎么办?此外,您还必须添加
.map(&:join)
以获取输出中的字符串而不是字符数组。关于如何处理非单词字符,要求不明确。我的回答纯粹回答了如何将一个字符串分成三块的问题。该示例建议将其用于单字字符串。如果该字符串包含非单词(非
A-Z A-Z 
)字符,该怎么办?此外,您还必须添加
.map(&:join)
以获取输出中的字符串而不是字符数组。关于如何处理非单词字符,要求不明确。我的回答纯粹回答了如何将一个字符串分成三块的问题。该示例建议将其用于单字字符串。这是一个很好的答案,也很有效,但您应该解释为什么它可以可靠地以3而不是1、2或纯粹任意的数量进行分块。@PlatinumAzure这是因为正则表达式“贪婪”,并且总是尽可能多地获取数据(除非您使用非贪婪修饰符,如
/\w{1,3}?/
)。非常好。+1适合您。这是一个很好的答案,也很有效,但您应该解释为什么它会可靠地以3而不是1、2或纯粹的任意数量进行块块分割。@PlatinumAzure这是因为正则表达式是“贪婪的”,并且总是尝试尽可能多地获取(除非您使用非贪婪修饰符,如
/\w{1,3}?/
)。非常好。+1适合您。这是一个很好的答案,也很有效,但您应该解释为什么它会可靠地以3而不是1、2或纯粹的任意数量进行块块分割。@PlatinumAzure这是因为正则表达式是“贪婪的”,并且总是尝试尽可能多地获取(除非您使用非贪婪修饰符,如
/\w{1,3}?/
)。非常好。+1适合您。这是一个很好的答案,也很有效,但您应该解释为什么它会可靠地以3而不是1、2或纯粹的任意数量进行块块分割。@PlatinumAzure这是因为正则表达式是“贪婪的”,并且总是尝试尽可能多地获取(除非您使用非贪婪修饰符,如
/\w{1,3}?/
)。非常好。+1适合您。