如果字符以字符开头,则从字符串中删除字符?

24 ruby string

如果该字符串以"1"开头,如何从任何字符串中删除第一个"1"?

"1hello world" => "hello world"
"112345" => "12345"
Run Code Online (Sandbox Code Playgroud)

我正在考虑做

string.sub!('1', '') if string =~ /^1/
Run Code Online (Sandbox Code Playgroud)

但我想知道有更好的方法.谢谢!

Zac*_*ley 40

为什么不在sub!方法中包含正则表达式?

string.sub!(/^1/, '')
Run Code Online (Sandbox Code Playgroud)


SRa*_*ack 9

从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"
Run Code Online (Sandbox Code Playgroud)

注意,您也可以使用它来删除带有delete_suffix和delete_suffix的字符串末尾的项目!

'worked'.delete_suffix('ed') #=> "work"
'medical'.delete_suffix('ed') #=> "medical"
Run Code Online (Sandbox Code Playgroud)

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

我在这里回答了一些细节(带基准):从字符串中删除第一个字符的最简单方法是什么?


Gor*_*son 8

如果您打算使用正则表达式进行匹配,您也可以将其用于替换

string.sub!(%r{^1},"")
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这%r{}只是正则表达式的替代语法.您可以使用%r,后跟任何字符,例如%r!^1!.

  • “顺便说一句,正则表达式的 %r{} 语法允许您避免在表达式中转义 / 。” - 但是现在您需要转义两个字符,而不是一个,但这一点毫无意义,因为所讨论的字符都没有出现在模式中。 (2认同)