如何在Ruby中用字符串切出一个单词?

时间:2014-12-10 06:40:07

标签: 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")不保证片段不是单词的一部分。

4 个答案:

答案 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)

您也可以使用subgsub如果要替换字符串

中出现的所有“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"

答案 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"