2012-08-31 40 views
0

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

你想要檢測什麼?任何重複字符的長序列? – fgp

+0

檢測長度等於N的字符串。N可以是任何整數。 – Alex

+0

你是指兩個空格之間的字符串或字符序列?要檢測一個字符串是否有超過N個字符,你只需要檢查它的大小,我相信這不是你的問題...... – fgp

回答

2

什麼像

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

,其中10是一個字的最大長度?

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

感謝您的回答,但它不適用於此示例: '「我是一個很長的http://www.exemple.com/a/b/c/d/e/f/g/h/ 1:2:3_3_980__eee long long link「' – Alex

+2

您只需要將\ w更改爲\ S。 \ w表示任何單詞字符(字母,數字,下劃線),而\ S表示任何非空白字符(因此它將包含您的「/」和「:」)。 – christianblais

+0

@亞歷克斯學習一些正則表達式。這很值得! – phoet