如何在Ruby中删除子字符串后的特定字符
我有一个带感叹号的字符串。我想去掉单词末尾的感叹号,而不是单词前面的感叹号。假设没有感叹号/没有单词。我的意思是[a..z]可以大写 例如:如何在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
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