[英]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.