Удалить символ из строки, если он начинается с этого символа? - PullRequest
23 голосов
/ 16 декабря 2008

Как я могу удалить самую первую "1" из любой строки, если эта строка начинается с "1"?

"1hello world" => "hello world"
"112345" => "12345"

Я думаю сделать

string.sub!('1', '') if string =~ /^1/

но мне интересно, есть лучший способ. Спасибо!

Ответы [ 6 ]

38 голосов
/ 16 декабря 2008

Почему бы просто не включить регулярное выражение в метод sub!?

string.sub!(/^1/, '')
8 голосов
/ 16 декабря 2008

если вы собираетесь использовать регулярное выражение для матча, вы также можете использовать его для замены

string.sub!(%r{^1},"")

Кстати, %r{} - это просто альтернативный синтаксис для регулярных выражений. Вы можете использовать% r, за которым следует любой символ, например, %r!^1!.

6 голосов
/ 27 октября 2017

Начиная с Ruby 2.5 вы можете использовать delete_prefix или delete_prefix! чтобы достичь этого в читабельной форме.

В этом случае "1hello world".delete_prefix("1").

Подробнее здесь:

https://blog.jetbrains.com/ruby/2017/10/10-new-features-in-ruby-2-5/

https://bugs.ruby -lang.org / вопросы / 12694

'invisible'.delete_prefix('in') #=> "visible"
'pink'.delete_prefix('in') #=> "pink"

N.B. Вы также можете использовать это для удаления элементов в конце строки с помощью delete_suffix и delete_suffix!

'worked'.delete_suffix('ed') #=> "work"
'medical'.delete_suffix('ed') #=> "medical"

https://bugs.ruby -lang.org / вопросы / 13665

Я ответил чуть более подробно (с тестами) здесь: Как проще всего удалить первый символ из строки?

1 голос
/ 16 декабря 2008

Осторожно, используя sub!(/^1/,'')! Если строка не соответствует /^1/, она вернет nil. Вы, вероятно, должны использовать sub (без взрыва).

0 голосов
/ 28 августа 2016

Я хотел бы опубликовать небольшое улучшение в другом превосходном ответе Зака. ^ соответствует началу каждой строки в регулярном выражении Ruby. Это означает, что в строке может быть несколько совпадений. Кенджи спросил о начале строки, что означает, что вместо этого они должны использовать это регулярное выражение:

string.sub!(/\A1/, '')

Сравнить это - несколько совпадений с это - одно совпадение .

0 голосов
/ 21 января 2015

Этот ответ может быть более оптимизированным: Какой самый простой способ удалить первый символ из строки?

string[0] = '' if string[0] == '1'

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