繁体   English   中英

同时更换2个字符串?

[英]Replace 2 strings at the same time?

如何在同一时间更换2个字符串? 例如,假设我有这样的字符串:

str1 =“AAAA BBBB CCCC DDDD”

我想用“CCCC”取代每个“AAAA”,用“AAAA”取代每个“CCCC”,但如果我这样做:

str1.gsub(“AAAA”,“CCCC”)# CCCC BBBB CCCC DDDD

str1.gsub(“CCCC”,“AAAA”)# AAAA BBBB AAAA DDDD

我想要str1成为“ CCCC BBBB AAAA DDDD”

一般答案:
使用正则表达式匹配AAAA和CCCC,然后分别用CCCC和AAAA替换每个匹配。

编辑以消除混乱

str1.gsub(/(AAAA|CCCC)/) { $1 == 'AAAA' ? 'CCCC' : 'AAAA' }

编辑我想到了更优雅的方式:)

str1.gsub(/((AAAA)|(CCCC))/) { $2 ? 'CCCC' : 'AAAA' }

您可以选择先用其他东西替换AAAA,然后继续吗?

str1.gsub("AAAA","WXYZ") # WXYZ BBBB CCCC DDDD
str1.gsub("CCCC","AAAA") # WXYZ BBBB AAAA DDDD
str1.gsub("WXYZ","CCCC") # CCCC BBBB AAAA DDDD

一个解决方案(虽然基于正则表达式的东西是最好的)将像创建替换哈希一样,可以根据需要进行扩展。 我只是很快就把它们放在一起来展示。 我肯定会有更多的爱和关心,你可以想出一些更优雅的东西,它们的工作方式相同,因为这个实现只适用于带空格的字符串。

str1 = "AAAA BBBB CCCC DDDD"    
replacements = { "AAAA" => "CCCC", "CCCC" => "AAAA", "XXXX" => "ZZZZ" } # etc...

new_string = ""
str1.split(" ").each do |s| 
    new_string += replacements[s] || s
    new_string += " "
end

puts new_string # CCCC BBBB AAAA DDDD 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM