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

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

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

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

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

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

16.12.2008 02:32:17
6 ОТВЕТОВ
РЕШЕНИЕ

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

string.sub!(/^1/, '')
40
16.12.2008 02:41:01

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

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

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

8
16.12.2008 03:18:50
«Кстати, синтаксис% r {} для регулярных выражений позволяет избежать экранирования / внутри выражения». - Но теперь у вас есть два символа, которые вам нужно выбрать вместо одного, но суть спорная, так как ни один из рассматриваемых символов даже не появляется в шаблоне.
Robert Gamble 16.12.2008 02:53:39
Это просто субъективное предпочтение. Я бы сказал, что / является более распространенным символом, чем {}. Кстати, мое объяснение было объяснено, если OP раньше не видел синтаксис% r {}.
Gordon Wilson 16.12.2008 03:13:29

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

1
16.12.2008 09:16:07
Нет, в этом случае он вернет nil, но исходная строка останется неизменной. Если вы просто используете sub, вам придется сделать более длинную строку = string.sub (/ ^ /, '').
Zach Langley 16.12.2008 19:05:33

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

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

0
1.01.2018 23:01:15

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

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

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

0
28.08.2016 20:50:43

Начиная с 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"

Обратите внимание, что вы также можете использовать это для удаления элементов из конца строки с помощью delete_suffix и delete_suffix!

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

https://bugs.ruby-lang.org/issues/13665

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

11
27.10.2017 13:36:41