ruby - 在字符串中查找和替换常用的街道后缀

时间:2010-06-08 04:10:17

标签: ruby string street-address

邮局实际上在地址中公布了常用的街道后缀列表:

http://www.usps.com/ncsc/lookups/abbr_suffix.txt

我想取这个列表并制作一个带字符串的ruby函数,取最后一个字(“183 main strt”.split [''] .last),如果它匹配任何常用的街道后缀( “strt”),将其替换为官方邮政服务标准后缀(“st”)。

有没有比大规模str.sub.sub.sub.sub.sub.sub更好的方法来解决这个问题?

4 个答案:

答案 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的数组,用每个方法迭代它们并在你的字符串中处理它们吗?

这肯定会比那些许多潜艇都更优雅。