Ruby: строка Разделения в символе, рассчитывающем от правой стороны

Вместо того, чтобы использовать конкатенацию строк, необходимо использовать StringBuilder, если код не является поточным, и StringBuffer, если это.

26
задан jpatokal 4 December 2009 в 00:35
поделиться

5 ответов

String # rpartition делает именно это:

name, match, suffix = name.rpartition('.')

Он был введен в Ruby 1.8.7, поэтому при запуске более ранней версии вы можете использовать require 'backports / 1.8. 7 / string / rpartition ' , чтобы это работало.

45
ответ дан 28 November 2019 в 07:02
поделиться

Наденьте на некоторое время мыслящую шапку и придумайте следующее регулярное выражение:

"what.to.do.now".split(/\.([^.]*)$/)
=> ["what.to.do", "now"]

Или, говоря человеческим языком, «разделить на точку, за которой не следует другая точка, в конце строки». Отлично работает также со строками без точек и последовательностями точек:

"whattodonow".split(/\.([^.]*)$/)
=> ["whattodonow"]
"what.to.do...now".split(/\.([^.]*)$/)
=> ["what.to.do..", "now"]
5
ответ дан 28 November 2019 в 07:02
поделиться

Вот что я бы на самом деле сделал:

/(.*)\.(.*)/.match("what.to.do")[1..2]
=> ["what.to", "do"]

или, возможно, более условно,

s = "what.to.do"

s.match(/(.*)\.(.*)/)[1..2]
=> ["what.to", "do"]
3
ответ дан 28 November 2019 в 07:02
поделиться

if this = "what.to.do" вы можете сделать это:

this.split(%r{(.+)\.})

и получите обратно

["", "what.to", "do"]
0
ответ дан 28 November 2019 в 07:02
поделиться

Если вам нужна буквальная версия rsplit , вы можете это сделать (отчасти это шутка, но на самом деле это хорошо работает):

"what.to.do".reverse.split('.', 2).map(&:reverse).reverse
=> ["what.to", "do"]
0
ответ дан 28 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: