В Ruby я хотел бы преобразовать отдельную строку с косой чертой, такую как «foo/bar/baz» в ["foo/bar/baz", "foo/bar", "foo"]. У меня уже есть решения на несколько строк; Я ищу элегантный элегантный лайнер. Он также должен работать для произвольного числа сегментов (0 и выше).Самый простой способ конвертировать «a/b/c» в [«a/b/c», «a/b», «a»]
ответ
Самые высокие проголосовавшие ответа работает, но вот немного короче способ сделать это, что я думаю, что будет более удобным для чтения для тех, кто не знаком со всеми особенностями используемых там:
a=[]; s.scan(/\/|$/){a << $`}
Результат хранится в a
:
> s = 'abc/def/ghi'
> a=[]; s.scan(/\/|$/){a << $`}
> a
["abc", "abc/def", "abc/def/ghi"]
Если порядок важен, вы можете полностью изменить массив или использовать unshift
вместо <<
.
Благодаря dkubb и OP для улучшения этого ответа.
На рубине 1.8.7 результатом является только # => «abc/def/ghi», а не массив, как указано в ответе – nas
@nas: Возвращаемое значение будет строкой в любой версии ruby. Запрошенный массив будет находиться в переменной 'a'. Если бы вы знали об этом и были просто придирчивы, не стесняйтесь игнорировать мои комментарии. – sepp2k
Вы можете упростить код в блоке далее: a = []; 'abc/def/ghi'.scan (/ \/| $ /) {a << $ '} – dkubb
"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
'Enumerator' FTW! –
Ничего себе. Это почти шепотом без всех парнеров. –
good! Более простой код «foo/bar/baz» .enum_for (: scan,% r {/ | $}). Map {$ '} – user3673267
Не совсем так эффективно, как выбранный ответ, и дает []
, когда дается пустая строка, а не [""]
, но его реальная один лайнер: P
s.split('/').inject([]) { |a,d| a.unshift([a.first,d].compact.join('/')) }
->(l,s,z){
(t = s[/#{z}.[^\/]*/]) && [l[l,s,t], t]
}.tap{ |l|
break l[l,'a/b/c','']
}.flatten.compact
К сожалению, это не самый простой ... – Nakilon
- 1. Как Flex различает A, AB и ABC?
- 2. RegEx: сопоставление и заменить ABC в "AB ABC D"
- 3. Почему «(. *?) $« Будет соответствовать »(abc abc)« в abc (abc abc) »?
- 4. Почему 'a' in ('abc') True, а 'a' в ['abc'] - False?
- 5. Как изменить «abc + dfg» на «abc» + «dfg»?
- 6. Как конвертировать (abc) в NAND-ворота?
- 7. "a // abc" .lstrip ("a: /") становится "bc". Зачем?
- 8. Как получить abc из "abc def"?
- 9. Почему Callable ABC в сборнике ABC-модуля?
- 10. Способ по шаблону: «если (объект является Abc && (объект, как Abc) ...)»
- 11. Почему ввод «abc !!!» но выход не «abC+++»?
- 12. Есть ли способ конвертировать swf в .abc-файл?
- 13. AB + C, когда у вас есть только ABC и C
- 14. Regex in java: найти все группы (? = (Ab) | (abc)) в abcdef
- 15. Выход только символы между [ABC] и [/ ABC]
- 16. Есть ли разница между `from abc import a, b` и` from abc import (a, b) `?
- 17. Регулярное выражение для соответствия A, AB, ABC, но не AC. («начинается с»)
- 18. Разница между [abc] и (a | b | c)
- 19. Регулярные выражения: [a] bc vs abc
- 20. Loop Count String (от A до ABC) C#
- 21. В чем разница между $ ('abc') и $ ("abc") в jQuery?
- 22. Java regex match против src = "abc" или src = 'abc'
- 23. Сортировка filename как abc 1.1, abc 1.1.1, abc 1.0 в PHP
- 24. Wordpress - фильтр ABC
- 25. Python ABC Multiple Inheritance
- 26. подклассов stringstream дает "0x401bad ABC" вместо "Foo ABC"
- 27. Какая разница между «abc» и {«abc»} в C?
- 28. проблема поиска: ABC = abc в C# как решить это?
- 29. Regex для обнаружения ABC/ABC 3 буквы, разделенные/в середине
- 30. Самый простой способ конвертировать TXT в PDF
Вы знаете о 'FileUtils.mkdir_p', правильно? – Svante