ruby正则表达式替换相应的字符串

ruby正则表达式替换相应的字符串,ruby,regex,string,Ruby,Regex,String,如何将str动态替换为“1627207:132069:color:red;20518:28421:size:S”。这是一个非常不清楚的问题,但我想我现在明白了。您的aliastr包含控制替换的映射,即键“20518:28421:”应映射到值“S”,键“1627207:132069:”应映射到“red”。然后,您需要在str中搜索这些键,并用新值替换它们的当前值。这就是: str = "1627207:132069:color:green;20518:28421:size:62cm" alias

如何将str动态替换为“1627207:132069:color:red;20518:28421:size:S”。

这是一个非常不清楚的问题,但我想我现在明白了。您的
aliastr
包含控制替换的映射,即键“20518:28421:”应映射到值“S”,键“1627207:132069:”应映射到“red”。然后,您需要在
str
中搜索这些键,并用新值替换它们的当前值。这就是:

str = "1627207:132069:color:green;20518:28421:size:62cm"

aliastr = "20518:28421:S;20518:28358:L;20518:28357:M;1627207:132069:red"

您的问题不是很清楚,可能包含错误(“您想要的结果中的颜色:红色”与aliastr中的“红色”)

您可以尝试以下方法:

str = "1627207:132069:color:green;20518:28421:size:62cm"
aliastr = "20518:28421:S;20518:28358:L;20518:28357:M;1627207:132069:red"

mapping = Hash[aliastr.scan(/(\d+:\d+:)(.*?)(?:;|$)/)]
# mapping = {"20518:28421:"=>"S", "20518:28358:"=>"L", "20518:28357:"=>"M", "1627207:132069:"=>"red"}

replaced = str.gsub(/(\d+:\d+:)(\w+:).*?(;|$)/) do |match|
  key = $1
  value = mapping[$1]
  key + $2 + value + $3
end

p replaced
# => "1627207:132069:color:red;20518:28421:size:S"

是的,但我不知道如何描述。不,我认为他想在结果字符串中同时保留“颜色”和“大小”。所以“颜色:红色”和“大小:S”而不仅仅是“红色”和“S”。@Trygve Flathen Nice@DaniëlKnippers你说得对,问题现在被编辑了。这使得我这里的一般方法不太适合这项任务。
str = "1627207:132069:color:green;20518:28421:size:62cm"
aliastr = "20518:28421:S;20518:28358:L;20518:28357:M;1627207:132069:red"
replacements = aliastr.split(";").map{|s| parts=s.split(":"); [/#{parts[0]}:#{parts[1]}:.*/,s]}
src = str.split(";")
src.map{|s| replacements.each{|r| s.sub!(r[0],r[1])}; s }.join(";")