将字符串截断为前n个单词

pag*_*gid 26 ruby string

将字符串截断为前n个单词的最佳方法是什么?

Til*_*ilo 41

n = 3
str = "your long    long   input string or whatever"
str.split[0...n].join(' ')
 => "your long long"


str.split[0...n] # note that there are three dots, which excludes n
 => ["your", "long", "long"]
Run Code Online (Sandbox Code Playgroud)

  • `str.split(/\s + /,n + 1)[0 ... n] .join('')`将提高性能. (24认同)
  • @ZackXu确保使用`...`范围文字,而不是`..`.三个点排除第n个值. (3认同)

mu *_*ort 9

你可以这样做:

s     = "what's the best way to truncate a ruby string to the first n words?"
n     = 6
trunc = s[/(\S+\s+){#{n}}/].strip
Run Code Online (Sandbox Code Playgroud)

如果你不介意复制.

您也可以通过调整空格检测来应用Sawa的改进(希望我仍然是数学家,这将是一个定理的一个伟大名称):

trunc = s[/(\s*\S+){#{n}}/]
Run Code Online (Sandbox Code Playgroud)

如果你必须处理n的数量大于当时的单词数量,s你可以使用这个变体:

s[/(\S+(\s+)?){,#{n}}/].strip
Run Code Online (Sandbox Code Playgroud)

  • 改进:`trunc = s [/(\ s*\S +){#{n}} /]`.你不需要`strip`. (4认同)