【问题标题】:Ruby: truncating a long string contained in another stringRuby:截断另一个字符串中包含的长字符串
【发布时间】:2012-08-31 18:05:41
【问题描述】:

让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 长的字符串?

【问题讨论】:

  • 您到底想检测什么?任何长序列的重复字符?
  • 检测一个大于等于N的字符串。N可以是任意整数。
  • 您的意思是两个空格之间的字符串或字符序列?要检测一个字符串是否超过 N 个字符,您只需要检查它的大小,我认为这不是您的问题...
  • 对不起,我没有提到要检测的字符串应该没有空格。所以它是两个空格之间的一系列字符。

标签: ruby-on-rails ruby truncate


【解决方案1】:

类似的东西呢

string.gsub(/\S{10,}/) { |x| "#{x[0..3]}...#{x[-3..-1]}" }

其中 10 是单词的最大长度?

【讨论】:

    【解决方案2】:

    你觉得这个怎么样?

    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." 
    

    【讨论】:

    • 感谢您的回答,但不适用于此示例:"I'm a very long http://www.exemple.com/a/b/c/d/e/f/g/h/1:2:3_3_980__eee long long link"
    • 您只需将 \w 更改为 \S。 \w 表示任何单词字符(字母、数字、下划线),而 \S 表示任何非空白字符(因此它将包括您的“/”和“:”)。
    • @Alex 学习一些正则表达式。这是值得的!
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2015-03-12
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多