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

时间:2008-12-16 02:32:18

标签: ruby string

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

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

我正在考虑做

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

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

6 个答案:

答案 0 :(得分:38)

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

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

答案 1 :(得分:8)

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

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

BTW,%r{}只是正则表达式的替代语法。您可以使用%r,后跟任何字符,例如%r!^1!

答案 2 :(得分:6)

从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

我在这里更详细地回答了一些问题(基准):What is the easiest way to remove the first character from a string?

答案 3 :(得分:1)

小心使用sub!(/^1/,'')!如果字符串与/^1/不匹配,则会返回nil。您应该使用sub(没有爆炸)。

答案 4 :(得分:0)

这个答案可能会更加优化:What is the easiest way to remove the first character from a string?

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

答案 5 :(得分:0)

我想对Zach的其他优秀答案发表微小的改进。 ^匹配Ruby regex中每个的开头。这意味着每个字符串可以有多个匹配项。 Kenji询问字符串的开头,这意味着他们必须使用这个正则表达式:

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

this - multiple matchesthis - one match进行比较。