如何在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
如果要替换字符串中所有出现的“is”gsub
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
如果要替换字符串中所有出现的“is”gsub
尝试使用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的评论。他完全正确。我的周围环境和字符类是不必要的;所需要的只是“是”两边的
我认为,这里有一个教训:当一个人想用Ruby做一些相当平常的事情,比如在文本中替换一个单词时,可能有一种方法可以将麻烦和麻烦降到最低。] 如果你打算处理完整的英语,这不是一个简单的问题。以下是您可能需要采用的方法:\b
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(/(?“这是一种美好的生活,它;是的,确实如此!”
在正则表达式中,
我认为,这里有一个教训:当一个人想用Ruby做一些相当平常的事情,比如在文本中替换一个单词时,可能有一种方法可以将麻烦和麻烦降到最低。] 如果你打算处理英语语言的完整性问题,这不是一个简单的问题。这里有一种方法你可能想要适应:(?
\b
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
之间使用的区别是什么?所有这些都遵循相同的方法并返回我认为与您读过的相同的结果“(“is”)或(“is”)不保证片段不是单词的一部分。”在问题中?是的,我读过,但是slice
、gsub
或sub
?它们都遵循相同的方法并返回相同的结果,我认为单词边界不也是一样的吗?slice
考虑到上面的评论是谁写的,我想我会搞砸的,但让我想一想……哇!坦白不仅对灵魂有好处,对销售代表也有好处。(+30,因为我几分钟前刚刚编辑过。)单词边界不也行吗?gsub(/\bis\b/I'))
考虑到上面的评论是谁写的,我想我可能把事情搞砸了,但让我想一想……哇!坦白不仅对灵魂有好处,对销售代表也有好处。(+30,因为我几分钟前刚刚编辑过。)gsub(/\bis\b/I,,)