这是我的代码:
query = "This is a good life"
=> "This is a good life"
query.slice!("is")
=> "is"
query
=> "Th is a good life"
我想要做的是仅在片段是一个单词时才切片,而不是另一个单词的一部分。
(" is ")
不会在前一个和后一个单词之间留下空格,并且不会对字符串的第一个或最后一个单词起作用。 ("is ")
或(" is")
不保证片段不是单词的一部分。 答案 0 :(得分:6)
[编辑:读者,请参阅@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 !"
在正则表达式中,(?<=\b|[;:-])
是一个&#34;正面的背后&#34 ;; (?=\b|[.?!])
是一个积极的前瞻&#34;。
答案 1 :(得分:0)
您也可以使用sub
。 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"
答案 2 :(得分:0)
尝试使用" is"
> query = "This is a good life"
=> "This is a good life"
> query.slice!(" is")
=> " is"
> query
=> "This a good life"
答案 3 :(得分:0)
这个问题的主要困难在于边界,如果单词是字符串中的第一个或最后一个。
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"