我正在转换输入,理想情况下总是包含以下内容:
本资料由(上市公司) “Name of a company in Chinese characters“公司提供
到现在为止,我有以下内容:
input = gets
input.gsub!(/(本資料由\(上市公司\))(.{1,10})(公司提供)/) {"
The following information has been provided by: #{$2}\n"}
Company_making_the_Announcement = /(The following information has been provided by: )(.+)/.match(input)
if Company_making_the_Announcement[2].match "如興"
input.gsub! Company_making_the_Announcement[2], "Roo Hsing Co., Ltd (TSEC:4414)"
elsif Company_making_the_Announcement[2].match "新潤"
input.gsub! Company_making_the_Announcement[2], "Shin Ruenn development Co., LTD. (GTSM:6186)"
elsif Company_making_the_Announcement[2].match "遠東商銀"
input.gsub! Company_making_the_Announcement[2], "Far Eastern International Bank Ltd. (TSEC:2845)"
end
上面的代码运行得很好,但它有点笨拙,特别是因为公司列表数以千计,随着我添加一家新公司,代码将大大增加。因此我想到了一种更有效,更优雅的方式来做到这一点。我认为使用数组/哈希可能会有所作为,但我没有运气,因为下面的代码会不断返回错误,无论我如何修改它:
companieslist = [{chin: '如興', eng: 'Roo Hsing Co., Ltd (TSEC:4414)' }, {chin: '新潤', eng: 'Shin Ruenn development Co., LTD. (GTSM:6186)' }]
Company_making_the_Announcement = /(The following information has been provided by: )(companieslist[:chin])/.match(input)
If Company_making_the_Announcement[2].match (companieslist[:chin])
Input.gsub! Company_making_the_Announcement[2], (companieslist[:eng])
end
那么,简而言之,将数组中的值(中文名称)与另一个中的值(英文名称)匹配的有效方法是什么,并在输入中出现时将第一个值替换为第二个值?
非常感谢
你走在正确的轨道上,只是没有利用哈希。而不是哈希数组,只需使用哈希,中文公司名称为密钥,英文名称为值。
companies = {'如興': 'Roo Hsing Co., Ltd (TSEC:4414)', '新潤': 'Shin Ruenn development Co., LTD. (GTSM:6186)' }
input = "如興 blah blah blah"
companies.each do |k,v|
input.gsub!("#{k}", "#{v}")
end
puts(input)
# Roo Hsing Co., Ltd (TSEC:4414) blah blah blah
请注意,这假设您要翻译每个中国公司名称的每个实例。如果公司名称重叠,则需要稍微不同的方法。