Как достичь Python как струнную полосу в Ruby?
В Python я могу удалять пробелы, новые строки или случайные символы из строк, таких как
>>> '/asdf/asdf'.strip('/')
'asdf/asdf' # Removes / from start
>>> '/asdf/asdf'.strip('/f')
'asdf/asd' # Removes / from start and f from end
>>> ' /asdf/asdf '.strip()
'/asdf/asdf' # Removes white space from start and end
>>> '/asdf/asdf'.strip('/as')
'df/asdf' # Removes /as from start
>>> '/asdf/asdf'.strip('/af')
'sdf/asd' # Removes /a from start and f from end
Но метод Ruby String#strip не принимает аргументов. Я всегда могу вернуться к использованию регулярных выражений, но есть ли способ / способ вырезать случайные символы из строк (тыловые и передние) в Ruby без использования регулярных выражений?
2 ответа
Решение
Вы можете использовать регулярные выражения:
"atestabctestcb".gsub(/(^[abc]*)|([abc]*$)/, '')
# => "testabctest"
Конечно, вы можете сделать этот метод также:
def strip_arbitrary(s, chars)
r = chars.chars.map { |c| Regexp.quote(c) }.join
s.gsub(/(^[#{r}]*)|([#{r}]*$)/, '')
end
strip_arbitrary("foobar", "fra") # => "oob"
Стрип питона немного необычен. Он удаляет любые символы, которые совпадают с любым из аргументов в любом конце.
Я думаю тебе нужно 2 .subs
, Один, чтобы раздеться с начала и один, чтобы раздеться с конца
irb(main):001:0> 'asdf/asdf'.sub(/^[\/]*/, '').sub(/[\/]*$/, '')
=> "asdf/asdf"
irb(main):002:0> 'asdf/asdf'.sub(/^[\/f]*/, '').sub(/[\/f]*$/, '')
=> "asdf/asd"
irb(main):003:0> ' asdf/asdf'.sub(/^[ ]*/, '').sub(/[ ]*$/, '')
=> "asdf/asdf"