ruby регулярное выражение разделить на последнее вхождение символа - PullRequest
2 голосов
/ 22 октября 2009

Я немного озадачен этим, и я все еще не на 1.8, поэтому у меня нет перспективы.

У меня есть куча строк, которые могут выглядеть так:

"a/b/c/d/e/f 1/2/3"

которую я хочу превратить в:

"a/b/c/d/e" "f" "1/2" "3"

Так что, в общем, я хочу, чтобы он разделился на последний слэш перед началом пробела. Я чувствую, что могу делать это нормально, но сплит всегда кажется странным.

Ответы [ 2 ]

6 голосов
/ 22 октября 2009

1.8 не хватает взгляда позади , а не взгляда впереди ! Все, что вам нужно, это:

str.split(/\/(?=[^\/]+(?: |$))| /)

Этот шаблон разделения соответствует a) любой косой черте, за которой следуют символы без косой черты до следующего пробела или конца строки, и b) любому пробелу.

1 голос
/ 22 октября 2009
def foo s
   return [$1,$2] if s =~ /(.+)\/(\S)/
end

str = "a/b/c/d/e/f 1/2/3"
a = str.split /\s+/
a.collect { |e| foo e }.flatten

=> ["/a/b/c/d/e", "f", "1/2", "3"]

Я сломал раскол и собрал. Конечно, вы можете сократить это по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...