让string_a = "I'm a string but this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa is long."
如何检测aaaa...aaa
(没有空间很长的部分)部分并截断它以使结果看起来像(字符串的其余部分应该看起来相同):
puts string_a # => "I'm a string but this aaa....aaa is long."
我使用此方法截断:
def truncate_string(string_x)
splits = string_x.scan(/(.{0,9})(.*?)(.{0,9}$)/)[0]
splits[1] = "..." if splits[1].length > 3
splits.join
end
所以跑步:
puts truncate_string("I'm a very long long long string") # => "I'm a ver...ng string"
问题是检测到'aaaa...aaaa'
并对其应用truncate_string
。
解决方案的第一部分?使用正则表达式检测长于N的字符串?
答案 0 :(得分:2)
像
这样的东西string.gsub(/\S{10,}/) { |x| "#{x[0..3]}...#{x[-3..-1]}" }
其中10是单词的最大长度?
答案 1 :(得分:1)
s = "I'm a string but this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa is long."
s.gsub(/(.* \w{3})\w{5,}(\w{3}.*)/, '\1...\2')
=> "I'm a string but this aaa...aaa is long."