使用ruby,是否可以替换字符串并节省大写字母。
想法是匹配“美好的一天”并将其变成“大声”并保留原始大写。例如:
在:
Good day to you sir and lady.
Hello and good day.
后:
Holler to you sir and lady.
Hello and holler.
由于
答案 0 :(得分:1)
如果您打算保留字符串的一部分并附加到该字符串,请使用返回引用和不区分大小写的搜索模式
yourstring.gsub(/(good day)/i, "\\1 and good night")
您可以在rubular
中的ruby
找到有关正则表达式如何工作的说明
<强>更新强>
因为,正如您在评论和更新后的问题中所述,您希望替换的第一个字母是否大写,根据模式,我认为这种略微冗长而有效的gsub
方法可以帮助您:< / p>
string = "Good day to you sir and lady. \nHello and good day."
puts string.gsub(/[gG]ood day/, 'good day' =>'holler', 'Good day'=>'Holler')
# Holler to you sir and lady.
# Hello and holler.
根据ruby 1.8.7
,gsub
可以接受散列作为第二个参数,并替换模式描述的可能匹配项。因此,上述语法等同于:
puts string.gsub(/[gG]ood day/, {'good day' =>'holler', 'Good day'=>'Holler'})
答案 1 :(得分:1)
你可以使用带有ignore case选项的Regexp转义方法来做这样的事情:
reg = Regexp.new(Regexp.escape("good day"), Regexp::IGNORECASE)
"good day".gsub(reg){|match| "#{match} and good night" }
=> "good day and good night"
"Good dAy".gsub(reg){|match| "#{match} and good night" }
=> "Good dAy and good night"
编辑以匹配更新的问题
使用与原始问题的答案类似的想法
"Good day".gsub(reg){|match| "#{match.capitalize == match ? 'Holler' : 'holler'} and good night" }
=> "Holler and good night"
"good day".gsub(reg){|match| "#{match.capitalize == match ? 'Holler' : 'holler'} and good night" }
=> "holler and good night"
答案 2 :(得分:1)
您可以将一个块传递给gsub
,然后您可以操作匹配的字符串
传递 i
选项会使正则表达式不区分大小写
string = "Good day to you sir and lady."
string.gsub(/good day/i) { |m| "#{m} and good night" }
#=> "Good day and good night to you sir and lady."
string = "Hello and good day."
string.gsub(/good day/i) { |m| "#{m} and good night" }
#=> "Hello and good day and good night."
参考gsub
答案 3 :(得分:1)
此方法:
old_str
text
应用不区分大小写的搜索
old_str
:
new_str
和old_str
个字符old_str
new_str
案例
def case_aware_replace(text, old_str, new_str)
text.gsub(/#{old_str}/i) do |word|
new_str.chars.zip(word.chars).map do |new_char, old_char|
if old_char
old_char.downcase == old_char ? new_char : new_char.upcase
else
new_char
end
end.join
end
end
puts case_aware_replace('Good day to you sir and lady.', 'good day', 'holler')
#=> Holler to you sir and lady.
puts case_aware_replace('Hello and good day.', 'good day', 'holler')
#=> Hello and holler.
puts case_aware_replace('HELLO GRANDMA!', 'hello', 'hi')
#=> HI GRANDMA!
puts case_aware_replace('AaAaAaA', 'a', 'b')
#=> BbBbBbB
puts case_aware_replace('AaAaAaA', 'a', 'b ')
#=> B b B b B b B
puts case_aware_replace(case_aware_replace(case_aware_replace('IBM', 'i', 'international '),'b', 'business '),'m', 'machines ')
#=> International Business Machines
答案 4 :(得分:-1)
2.3.1 :003 > a = "Good day to you sir and lady".downcase.gsub('good day', 'good day and good night').capitalize
=> "Good day and good night to you sir and lady"
我所做的是,
答案 5 :(得分:-1)
Hellor to you sir and lady.
Hello and hellor.
将返回
function GetXmlHttpObject(){
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
var xmlhttp=GetXmlHttpObject();
只有两种情况(假设只有首字母可以大写),直接替换两种情况就足够了。