Ruby 是否从字符串中删除以该字符开头的字符?

Ruby 是否从字符串中删除以该字符开头的字符?,ruby,string,Ruby,String,如果任何字符串以“1”开头,如何删除该字符串的第一个“1” 我在考虑做什么 string.sub!('1', '') if string =~ /^1/ 但我想知道还有更好的办法。谢谢 为什么不在子文件中包含正则表达式呢方法 string.sub!(/^1/, '') 如果你打算在比赛中使用正则表达式,你也可以用它来替换 string.sub!(%r{^1},"") 顺便说一句,%r{}只是正则表达式的另一种语法。您可以使用%r后跟任何字符,例如%r^1! 小心使用sub!(/^1/,“”

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

我在考虑做什么

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

但我想知道还有更好的办法。谢谢

为什么不在
子文件中包含正则表达式呢方法

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

如果你打算在比赛中使用正则表达式,你也可以用它来替换

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

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

小心使用
sub!(/^1/,“”)
!如果字符串与
/^1/
不匹配,它将返回
nil
。您可能应该使用
sub
(没有爆炸)。

这个答案可能更为优化:


string[0]=''如果string[0]='1'

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

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

与之相比。

从Ruby 2.5开始,您可以使用或删除前缀!以可读的方式实现这一点

在本例中,
“1hello world”。删除前缀(“1”)

更多信息请点击此处:

注意:您还可以使用此选项删除带有delete_后缀和delete_后缀的字符串末尾的项目

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


我在这里(用基准测试)回答了更详细的问题:

“顺便说一句,正则表达式的%r{}语法允许您避免在表达式中转义/。”-但现在你有两个角色需要转义,而不是一个,但这一点是没有意义的,因为这些角色都没有出现在图案中。这只是一种主观偏好。我认为/比{}更常见。顺便说一句,如果OP以前没有看到%r{}语法,我的解释是这样的。不,在这种情况下它将返回nil,但原始字符串将保持不变。如果您只使用
sub
,则必须使用更长的字符串=string.sub(/^/,'')。的可能重复项不知道如何优化,但对我来说,这似乎是最具可读性的解决方案。我觉得正则表达式解决方案很难看一定很奇怪!
'invisible'.delete_prefix('in') #=> "visible"
'pink'.delete_prefix('in') #=> "pink"
'worked'.delete_suffix('ed') #=> "work"
'medical'.delete_suffix('ed') #=> "medical"