相当简单的问题我需要拿一个字符串,例如“Bob Smith”并返回“Bob S.” - 或“Javier de Luca”并返回“Javier de L.”。换句话说,将字符串中的最后一个单词缩写为第一个单词并添加句点。
这就是我所拥有的 - 它有效,但看起来很笨拙。
str = str.split(' ')
str[str.length - 1] = "#{str.last[0]}."
str = str.join(' ')
当然,有一种更优雅的方式。
答案 0 :(得分:4)
>> "Bob Smith".sub(/(.+\b.).+\z/, '\1.')
=> "Bob S."
>> "Javier de Luca".sub(/(.+\b.).+\z/, '\1.')
=> "Javier de L."
此正则表达式捕获整个字符串,直到最后一个单词的第二个字符。然后它用捕获加上句点ala \1.
答案 1 :(得分:1)
这个怎么样:
name = 'Javier de Luca'
name.sub!(/(\w)\w+$/, '\1.')
答案 2 :(得分:0)
您可以在1.9中使用tap
:
str = str.split(/\s+/).tap { |a| a[-1].sub!(/(.).+/) { "#{$1}." } }.join(' ')
使用a[-1].sub!
将修改最后一个元素,以便tap
块修改a
并将其传递给join
调用。并且,.+
负责留下像Joe B
这样的奇怪名字;如果您希望它成为Joe B.
,则使用.*
代替.+
。