Ruby从字符串中删除第一个单词

15

我有点困惑如何解决这个问题。如何从类似下面的字符串中删除第一个单词。

     "i am going to school"

     "he is going to school"

     "she is going to school" 

     "they are going to school"

字符串可以是任何字符串,不知道第一个单词的确切长度,但只想删除第一个单词。

结果应该如下所示

      "am going to school"

     "is going to school"

     "is going to school" 

     "are going to school"

需要帮忙吗?

谢谢。

4个回答

28
"i am going to school".split(' ')[1..-1].join(' ')

=> "am going to school"

在 Ruby 中,您可以双向访问数组,因此-1 表示最后一个元素。


7
或者可以使用 Enumerable.drop 方法跳过第一个元素来代替切片操作,例如 "我要去上学了".split(' ').drop(1).join(' ')。该方法能实现相同的功能,并且保持原意不变。您可以参考 Enumerable.drop 的文档了解更多信息。 - Colonel Panic

10

'她要去上学'[/(?<=\s).*/] => "要去上学"

这里使用了 Ruby 的正向后查找定位符:

(?<=pat) - 正向后查找断言: 确保前面的字符与 pat 匹配,但不包括这些字符在匹配文本中

因此该模式查找一个空格字符后跟任意字符的字符串。由于重复量(如“*”)是贪婪的,它会选择最长匹配字符串。


1
好的回答。不过你可以多加描述。 - Roney Michael

1
使用正则表达式。
str = "i am going to school"
puts str.gsub(/^(\w\s+)(.*)/, '\2')

=> "am going to school"

4
如果每个字符串中最多只有一个匹配项,使用gsub没有任何意义。 - sawa

1
对于每个字符串都执行以下操作:
string.sub(/\s*[\w']+\s+/, "")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接