簡體   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