我需要取出大写字符的最长子字符串。所以不在字符串中:
"aaBBBBcBBdDDD"
我需要"BBBB"
。
是否有方便的Ruby方法或某种正则表达式?我试过了:
string.scan(/[[:upper:]]/)
几乎就是它,它只提供所有大写字符,而不是最长的序列。
答案 0 :(得分:8)
使用正则表达式获取大写单词数组,然后使用Enumerable#max_by
查找最长的单词:
"aaBBBBcBBdDDD".scan(/[[:upper:]]+/).max_by {|x| x.length}
# => "BBBB"
或更简单:
"aaBBBBcBBdDDD".scan(/[[:upper:]]+/).max_by(&:length)
# => "BBBB"
答案 1 :(得分:1)
您无法通过正则表达式找到具有最大长度的字符串。您需要使用一些内置的Ruby函数。
> m = "aaBBBBcBBdDDD".scan(/[[:upper:]]+/)
=> ["BBBB", "BB", "DDD"]
> vc = m.sort{|a,b| b.size <=> a.size}
=> ["BBBB", "DDD", "BB"]
> vc.delete_if{|a| a.size < vc.first.size}
=> ["BBBB"]
答案 2 :(得分:0)
答案 3 :(得分:0)
您未指定超过1个相同最大长度的字符串的预期结果。
<@> @ AvinashRaj的答案将处理这个问题,而@ YuHao不会。如果你只想要1个结果我会建议@YuHao回答如果你想要所有的结果我会改变@ AvinashRaj回答这样的事情。"aaBBBBcBBdDDDD".scan(/[[:upper:]]+/).tap do |a|
max_length = a.map(&:length).max
a.delete_if{|x| x.length < max_length }
end
#=> ["BBBB","DDDD"]