邮局实际上公布了地址中常用的街道后缀列表:
http://www.usps.com/ncsc/lookups/abbr_suffix.txt
我想获取这个列表并制作一个 ruby 函数,它接受一个字符串,接受最后一个单词(“183 main strt”.split[''].last),如果它匹配任何常用的街道后缀(“strt” ),将其替换为官方邮政服务标准后缀(“st”)。
有没有比大量 str.sub.sub.sub.sub.sub 更好的方法来解决这个问题?
邮局实际上公布了地址中常用的街道后缀列表:
http://www.usps.com/ncsc/lookups/abbr_suffix.txt
我想获取这个列表并制作一个 ruby 函数,它接受一个字符串,接受最后一个单词(“183 main strt”.split[''].last),如果它匹配任何常用的街道后缀(“strt” ),将其替换为官方邮政服务标准后缀(“st”)。
有没有比大量 str.sub.sub.sub.sub.sub 更好的方法来解决这个问题?
我会将后缀放在哈希中,其中通用后缀是键,官方后缀是值。然后您可以查找哈希中的最后一个单词。
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
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")
+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 的一名软件工程师,可以回答您可能有的任何其他问题。
你可以用所有这些常用的后缀创建一个数组,用每个方法迭代它们并在你的字符串中处理它们?
那肯定会比所有那些潜艇更优雅。