邮局实际上在地址中公布了常用的街道后缀列表:
http://www.usps.com/ncsc/lookups/abbr_suffix.txt
我想取这个列表并制作一个带字符串的ruby函数,取最后一个字(“183 main strt”.split [''] .last),如果它匹配任何常用的街道后缀( “strt”),将其替换为官方邮政服务标准后缀(“st”)。
有没有比大规模str.sub.sub.sub.sub.sub.sub更好的方法来解决这个问题?
答案 0 :(得分:6)
我会将后缀放在哈希中,其中公共后缀是键,官方后缀是值。然后你可以在哈希中查找最后一个单词。
SUFFIXES = { "ALLEE" => "ALY", "ALLEY" => "ALY" }
addy = "183 main allee"
last = addy.split.last.upcase
addy = addy[0..-last.length-1] + SUFFIXES[last] if SUFFIXES[last]
puts addy
答案 1 :(得分:1)
STREET_SUFFIXES = { "ALLEE" => "ALY", "ALLEY" => "ALY" }
def fix_address(string)
string.gsub(/[^s]+$/) { STREET_SUFFIXES[$1.upcase] || $1 }
end
puts fix_address("183 main allee")
答案 2 :(得分:0)
+1用于使用CASS供应商 - 尤其是提供API的应用程序,该API始终为实际地址提供标准化结果。此外,某些服务实际上会返回为您分割的地址组件(例如Street Suffix)。因为它刚刚使用USPS数据和约定进行验证,所以后缀已经是USPS首选形式。以下是一些示例代码,例如API:
https://github.com/smartystreets/LiveAddressSamples/blob/master/ruby/street_address.rb
此代码调用SmartyStreets LiveAddress API(注意'street_suffix'字段)。我是SmartyStreets的软件工程师,可以回答您可能遇到的任何其他问题。
答案 3 :(得分:-1)
你可以创建一个包含所有常用的sufix的数组,用每个方法迭代它们并在你的字符串中处理它们吗?
这肯定会比那些许多潜艇都更优雅。