Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中删除子字符串后的特定字符_Ruby_String - Fatal编程技术网

如何在Ruby中删除子字符串后的特定字符

如何在Ruby中删除子字符串后的特定字符,ruby,string,Ruby,String,我有一个带感叹号的字符串。我想去掉单词末尾的感叹号,而不是单词前面的感叹号。假设没有感叹号/没有单词。我的意思是[a..z]可以大写 例如: exclamation("Hello world!!!") #=> ("Hello world") exclamation("!!Hello !world!") #=> ("!!Hello !world") 我读过;这两者很接近,但不同 def exclamation(s) s.slice(0..(s.index(/\w/))) end

我有一个带感叹号的字符串。我想去掉单词末尾的感叹号,而不是单词前面的感叹号。假设没有感叹号/没有单词。我的意思是[a..z]可以大写

例如:

exclamation("Hello world!!!")
#=> ("Hello world")

exclamation("!!Hello !world!")
#=> ("!!Hello !world")
我读过;这两者很接近,但不同

def exclamation(s)
  s.slice(0..(s.index(/\w/)))
end

# exclamation("Hola!") returns "Hol"
我也尝试过
s.gsub(/\w!+/,“”)
。虽然它保留了
“!”
在word之前,它删除最后一个字母和感叹号<代码>感叹号(“!Hola!!”)#=>“!Hol”


如何仅删除结尾处的感叹号?

虽然您没有给出很多测试数据,但下面是一个可能有效的示例:

def exclamation(string)
  string.gsub(/(\w+)\!(?=\s|\z)/, '\1')
end
\s |\z
部分表示空格或字符串的结尾,而
(?=…)
表示只在字符串中向前看,但不实际匹配它


请注意,在诸如“我疯了!”之类的情况下,感叹号不与空格相邻,但您始终可以将其添加为另一个可能的词尾匹配。

虽然您没有给出很多测试数据,但下面是一个可能有效的示例:

def exclamation(string)
  string.gsub(/(\w+)\!(?=\s|\z)/, '\1')
end
"!!Hello !world!, world!! I say".gsub(r, '')
  #=> "!!Hello !world, world! I say"
\s |\z
部分表示空格或字符串的结尾,而
(?=…)
表示只在字符串中向前看,但不实际匹配它

请注意,在诸如“我疯了!”之类的情况下,感叹号与空格不相邻,但您始终可以将其添加为另一个可能的单词结尾匹配

"!!Hello !world!, world!! I say".gsub(r, '')
  #=> "!!Hello !world, world! I say"
在哪里

如果上面的例子应该返回
“!!你好!世界,世界我说”
,更改
+在正则表达式中

在哪里


如果上面的例子应该返回
“!!你好!世界,世界我说”
,更改
+在正则表达式中。

如果您不想使用有时难以理解的正则表达式,请使用以下命令:

def exclamation(sentence)
  words = sentence.split
  words_wo_exclams = words.map do |word|
    word.split('').reverse.drop_while { |c| c == '!' }.reverse.join
  end
  words_wo_exclams.join(' ')
end

如果您不想使用有时难以理解的正则表达式,请使用以下命令:

def exclamation(sentence)
  words = sentence.split
  words_wo_exclams = words.map do |word|
    word.split('').reverse.drop_while { |c| c == '!' }.reverse.join
  end
  words_wo_exclams.join(' ')
end