如何在Ruby中从字符串中切掉一个单词?

如何在Ruby中从字符串中切掉一个单词?,ruby,string,Ruby,String,这是我的密码: query = "This is a good life" => "This is a good life" query.slice!("is") => "is" query => "Th is a good life" 我想做的是,仅当片段是一个单词,而不是另一个单词的一部分时,才将其切分 切片(“is”)在前面和后面的单词之间不留空格,并且对字符串的第一个或最后一个单词不起作用 (“is”)或(“is”)不保证片段不是单词的一部分 您也可以使用subgs

这是我的密码:

query = "This is a good life"
=> "This is a good life"
query.slice!("is")
=> "is"
query
=> "Th is a good life"
我想做的是,仅当片段是一个单词,而不是另一个单词的一部分时,才将其切分

  • 切片
    (“is”)
    在前面和后面的单词之间不留空格,并且对字符串的第一个或最后一个单词不起作用
  • (“is”)
    (“is”)
    不保证片段不是单词的一部分
      您也可以使用
      sub
      gsub
      如果要替换字符串中所有出现的“is”

      query = "This is a good life"
      # => "This is a good life"
      query.sub(" is ", " ")   
      # => "This a good life"
      query.gsub(" is ", " ") 
      # => "This a good life"
      

      您也可以使用
      sub
      gsub
      如果要替换字符串中所有出现的“is”

      query = "This is a good life"
      # => "This is a good life"
      query.sub(" is ", " ")   
      # => "This a good life"
      query.gsub(" is ", " ") 
      # => "This a good life"
      
      尝试使用
      “is”

      尝试使用
      “is”


      这个问题的主要困难是关于边界,如果单词是字符串中的第一个或最后一个

      x = "is"  # any word to slice
      query = "This is a good life"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "This a good life"
      x = "This"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "is a good life"
      x = "life"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "This is a good"
      

      这个问题的主要困难是关于边界,如果单词是字符串中的第一个或最后一个

      x = "is"  # any word to slice
      query = "This is a good life"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "This a good life"
      x = "This"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "is a good life"
      x = "life"
      query.gsub(/(\b\s#{x}\b|^#{x}\b\s|\b\s#{x}$)/, '') # "This is a good"
      

      [编辑:读者们,请看@Stefan的评论。他完全正确。我的周围环境和字符类是不必要的;所需要的只是“是”两边的
      \b
      我认为,这里有一个教训:当一个人想用Ruby做一些相当平常的事情,比如在文本中替换一个单词时,可能有一种方法可以将麻烦和麻烦降到最低。]

      如果你打算处理完整的英语,这不是一个简单的问题。以下是您可能需要采用的方法:

      query = "This is a good life, it is; yes, indeed it is!"
      
      query.gsub(/(?<=\b|[;:-])is(?=\b|[.?!])/i,'')
        => "This  a good life, it ; yes, indeed it !"
      
      query=“这是一种美好的生活,的确如此;是的,的确如此!”
      gsub(/(?“这是一种美好的生活,它;是的,确实如此!”
      

      在正则表达式中,
      (?\b
      我认为,这里有一个教训:当一个人想用Ruby做一些相当平常的事情,比如在文本中替换一个单词时,可能有一种方法可以将麻烦和麻烦降到最低。]

      如果你打算处理英语语言的完整性问题,这不是一个简单的问题。这里有一种方法你可能想要适应:

      query = "This is a good life, it is; yes, indeed it is!"
      
      query.gsub(/(?<=\b|[;:-])is(?=\b|[.?!])/i,'')
        => "This  a good life, it ; yes, indeed it !"
      
      query=“这是一种美好的生活,的确如此;是的,的确如此!”
      gsub(/(?“这是一种美好的生活,它;是的,确实如此!”
      

      在正则表达式中,
      (?一种先用空格字符分割字符串的方法怎么样?一种先用空格字符分割字符串的方法怎么样?那“是吗?”,“是吗?”,“现在是时候了”?我担心我的代码没有处理这些案例。由于OP本人没有考虑这些案例,我也跳过了它们。我看到了您是如何处理这些案例的。+1。那么“是吗?”,“是吗?”,“现在是时候了”?我担心我的代码没有处理这些情况。由于OP本人没有考虑这些情况,我也跳过了它们。我看到了你是如何处理它们的。你读过“(“是”)或(“是”)吗?不保证片段不是单词的一部分。”在问题中?是的,我读过,但
      gsub
      sub
      slice
      之间使用的区别是什么?所有这些都遵循相同的方法并返回我认为与您读过的相同的结果“(“is”)或(“is”)不保证片段不是单词的一部分。”在问题中?是的,我读过,但是
      gsub
      sub
      slice
      ?它们都遵循相同的方法并返回相同的结果,我认为单词边界不也是一样的吗?
      gsub(/\bis\b/I'))
      考虑到上面的评论是谁写的,我想我会搞砸的,但让我想一想……哇!坦白不仅对灵魂有好处,对销售代表也有好处。(+30,因为我几分钟前刚刚编辑过。)单词边界不也行吗?
      gsub(/\bis\b/I,,)
      考虑到上面的评论是谁写的,我想我可能把事情搞砸了,但让我想一想……哇!坦白不仅对灵魂有好处,对销售代表也有好处。(+30,因为我几分钟前刚刚编辑过。)