Ruby-将包含名称的字符串缩写为名字的首字母
相当简单的问题,我需要一个字符串,例如,包含“Bob Smith”并返回“Bob S.”或“Javier de Luca”并返回“Javier de L.”。换句话说,将字符串中的最后一个单词缩写为首字母,并添加句点 这就是我所拥有的——它可以工作,但看起来很笨拙Ruby-将包含名称的字符串缩写为名字的首字母,ruby,Ruby,相当简单的问题,我需要一个字符串,例如,包含“Bob Smith”并返回“Bob S.”或“Javier de Luca”并返回“Javier de L.”。换句话说,将字符串中的最后一个单词缩写为首字母,并添加句点 这就是我所拥有的——它可以工作,但看起来很笨拙 str = str.split(' ') str[str.length - 1] = "#{str.last[0]}." str = str.join(' ') 当然,还有一种更优雅的方式。您可以在1.9中使用点击: str = s
str = str.split(' ')
str[str.length - 1] = "#{str.last[0]}."
str = str.join(' ')
当然,还有一种更优雅的方式。您可以在1.9中使用
点击:
str = str.split(/\s+/).tap { |a| a[-1].sub!(/(.).+/) { "#{$1}." } }.join(' ')
使用a[-1].sub
将修改最后一个元素,因此点击块将修改a
,并将其传递给join
调用。而且,+
负责单独留下像joeb
这样的奇怪名字;如果您想让它成为Joe B.
他们使用*
而不是+
,您可以使用1.9中的点击
:
str = str.split(/\s+/).tap { |a| a[-1].sub!(/(.).+/) { "#{$1}." } }.join(' ')
>> "Bob Smith".sub(/(.+\b.).+\z/, '\1.')
=> "Bob S."
>> "Javier de Luca".sub(/(.+\b.).+\z/, '\1.')
=> "Javier de L."
使用a[-1].sub
将修改最后一个元素,因此点击块将修改a
,并将其传递给join
调用。而且,+
负责单独留下像joeb
这样的奇怪名字;如果你想让它变成joeb.
他们使用*
而不是+
>> "Bob Smith".sub(/(.+\b.).+\z/, '\1.')
=> "Bob S."
>> "Javier de Luca".sub(/(.+\b.).+\z/, '\1.')
=> "Javier de L."
此正则表达式捕获整个字符串,直到最后一个单词的第二个字符。然后它用捕获加上一个句点来替换这个字符串。
\1.
此正则表达式捕获整个字符串,直到最后一个单词的第二个字符。然后,它用捕获加上一个句点来替换这个字符串。
这个呢:
name = 'Javier de Luca'
name.sub!(/(\w)\w+$/, '\1.')
那么这个呢:
name = 'Javier de Luca'
name.sub!(/(\w)\w+$/, '\1.')
美丽的。我想我甚至可以理解正则表达式美丽的。我想我甚至可以理解正则表达式