У меня есть вход:
input = gets
, в котором подстрока формы:
"本資料由(Name of a contractor)提供"
появляется в разных позициях.У меня также есть тысячи имен подрядчиков и их транслитераций на английском языке, которые хранятся в хэше:
hash = {'key1': 'value1', 'key2': 'value2'}
У меня есть следующий код:
input.gsub!(/本資料由(.+)提供/) {"\nThe following information has been provided by: #{$1}\n"}
# => The following information has been provided by: (name of contractor)
Чтобы изменить собственное имя на английское имя, яможно сделать:
person_making_announcement = /(The following information has been provided by: )(.+)/.match(input)
if Company_making_the_Announcement[2].match "key1"
input.gsub! Company_making_the_Announcement[2], "value1"
elsif Company_making_the_Announcement[2].match "key2"
input.gsub! Company_making_the_Announcement[2], "value2"
end
Но это очень неуклюже, и я все равно нуждаюсь в них в хэше для других частей кода.Если я сделаю:
hash.each do |k, v|
input.gsub!("#{k}", "#{v}")
end
, тогда все совпадения в input
будут изменены.Если я изменю метод на использование sub!
, будет изменен только первый экземпляр.Я думал, что будет работать следующее:
myregex = /(There is text here: )(.+)/.match(input)
hash.each do |k, v|
myregex[2].gsub!("#{k}", "#{v}")
end
Но это не так.Мне нужно сохранить регулярное выражение, так как оно является частью подстановки, и изменения, ранее сделанные на входе.
Каков будет синтаксис для внесения изменений только внутри определенной подгруппы в регулярном выражении, сопоставленной с входом?