如果该字符串以“1”开头,如何从任何字符串中删除第一个“1”?
"1hello world" => "hello world"
"112345" => "12345"
我正在考虑做
string.sub!('1', '') if string =~ /^1/
但我想知道有更好的方法。谢谢!
答案 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/, '')