Как я могу удалить самую первую "1" из любой строки, если эта строка начинается с "1"?
"1hello world" => "hello world" "112345" => "12345"
Я думаю сделать
string.sub!('1', '') if string =~ /^1/
но мне интересно, есть лучший способ. Спасибо!
Почему бы просто не включить регулярное выражение в метод sub!?
sub!
string.sub!(/^1/, '')
если вы собираетесь использовать регулярное выражение для матча, вы также можете использовать его для замены
string.sub!(%r{^1},"")
Кстати, %r{} - это просто альтернативный синтаксис для регулярных выражений. Вы можете использовать% r, за которым следует любой символ, например, %r!^1!.
%r{}
%r!^1!
Начиная с Ruby 2.5 вы можете использовать delete_prefix или delete_prefix! чтобы достичь этого в читабельной форме.
В этом случае "1hello world".delete_prefix("1").
"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
Я ответил чуть более подробно (с тестами) здесь: Как проще всего удалить первый символ из строки?
Осторожно, используя sub!(/^1/,'')! Если строка не соответствует /^1/, она вернет nil. Вы, вероятно, должны использовать sub (без взрыва).
sub!(/^1/,'')
/^1/
nil
sub
Я хотел бы опубликовать небольшое улучшение в другом превосходном ответе Зака. ^ соответствует началу каждой строки в регулярном выражении Ruby. Это означает, что в строке может быть несколько совпадений. Кенджи спросил о начале строки, что означает, что вместо этого они должны использовать это регулярное выражение:
^
string.sub!(/\A1/, '')
Сравнить это - несколько совпадений с это - одно совпадение .
Этот ответ может быть более оптимизированным: Какой самый простой способ удалить первый символ из строки?
string[0] = '' if string[0] == '1'