Подтвердить что ты не робот

Удалить символ из строки, если он начинается с этого символа?

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

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

Я думаю о том, чтобы делать

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

но я задаюсь вопросом, куда лучше. Спасибо!

4b9b3361

Ответ 1

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

string.sub!(/^1/, '')

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

С 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/issues/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/issues/13665

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

Ответ 6

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

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

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