Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从地址中删除街道后缀_Ruby_Regex - Fatal编程技术网

Ruby 从地址中删除街道后缀

Ruby 从地址中删除街道后缀,ruby,regex,Ruby,Regex,试图从地址中识别(并删除)街道后缀(如“St”、“Dr”等)。假设后缀是统一的,我们可以创建一个完整的后缀列表 谢谢 street_suffix_list = ["St", "Dr", "Ave", "Blvd", "Tr"] address = "105 Main St" #returns "Main St" street = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '') #desired: "St" street_suffix

试图从地址中识别(并删除)街道后缀(如“St”、“Dr”等)。假设后缀是统一的,我们可以创建一个完整的后缀列表

谢谢

 street_suffix_list = ["St", "Dr", "Ave", "Blvd", "Tr"]
 address = "105 Main St"

 #returns "Main St"
 street = address.gsub(/^((\d[a-zA-Z])|[^a-zA-Z])*/, '')

 #desired: "St"
 street_suffix = 

 #desired: "Main"
 street_name = 

使用“streetaddress”gem,您可以解析任何地址和地址 提取地址的组件

gem install StreetAddress
irb
1.9.3-p551 :002 > require 'street_address'
 => true 
1.9.3-p551 :003 > address = StreetAddress::US.parse("1600 Pennsylvania Ave, Washington, DC, 20500")
 => 1600 Pennsylvania Ave, Washington, DC 20500 
1.9.3-p551 :004 > address.street
 => "Pennsylvania" 
1.9.3-p551 :005 > 

使用“streetaddress”gem,您可以解析任何地址和地址 提取地址的组件

gem install StreetAddress
irb
1.9.3-p551 :002 > require 'street_address'
 => true 
1.9.3-p551 :003 > address = StreetAddress::US.parse("1600 Pennsylvania Ave, Washington, DC, 20500")
 => 1600 Pennsylvania Ave, Washington, DC 20500 
1.9.3-p551 :004 > address.street
 => "Pennsylvania" 
1.9.3-p551 :005 > 

您可以构建一个带有替换项的动态正则表达式模式(也可以在末尾匹配可选点以删除该标点,如果存在):

以下是示例:


请注意,如果没有单词边界,您将删除
Transylvania
中的
Tr
和类似内容。

您可以构建一个带有替换项的动态正则表达式模式(也可以在末尾匹配可选点以删除该标点,如果存在):

以下是示例:


请注意,如果没有单词边界,您将删除
Transylvania
中的
Tr
和类似内容。

您只需使用
Regexp
将街道与后缀分开即可:

street_suffix_list = ["St", "Dr", "Ave", "Blvd", "Tr"]
address = "105 Main St"

idx = /(#{street_suffix_list.join('|')})\z/ =~ address
# $1 => St
sfx = $1
street = address[0..idx-1].strip
# street => "105 Main"
后缀数组最好使用安全连接方法和方法(thanx@Jordan):


您只需使用
Regexp
将街道与后缀分开即可:

street_suffix_list = ["St", "Dr", "Ave", "Blvd", "Tr"]
address = "105 Main St"

idx = /(#{street_suffix_list.join('|')})\z/ =~ address
# $1 => St
sfx = $1
street = address[0..idx-1].strip
# street => "105 Main"
后缀数组最好使用安全连接方法和方法(thanx@Jordan):


如果知道后缀的位置将是字符串中的最后一个单词,则不需要正则表达式:

2.3.0 :017 > suffixes = %w(st ave dr rd blvd)
 => ["st", "ave", "dr", "rd", "blvd"]
2.3.0 :018 > address = '105 Main St'
 => "105 Main St"
2.3.0 :019 > tokens = address.split
 => ["105", "Main", "St"]
2.3.0 :021 > found_match = suffixes.include?(tokens.last.downcase)
 => true
2.3.0 :028 > if found_match
2.3.0 :029?>   street_suffix = tokens.last
2.3.0 :030?>   street_rest = tokens[0..-2]
2.3.0 :031?>   # ...
2.3.0 :032 >     puts street_suffix; puts street_rest.join(' ')
2.3.0 :033?>   end
St
105 Main
 => nil

总而言之,您将很难解释地址可能包含的所有变化。我强烈建议为此使用gem,可能是@oystersauce8提到的
StreetAddress
gem。

如果您知道后缀的位置将是字符串中的最后一个单词,则不需要正则表达式:

2.3.0 :017 > suffixes = %w(st ave dr rd blvd)
 => ["st", "ave", "dr", "rd", "blvd"]
2.3.0 :018 > address = '105 Main St'
 => "105 Main St"
2.3.0 :019 > tokens = address.split
 => ["105", "Main", "St"]
2.3.0 :021 > found_match = suffixes.include?(tokens.last.downcase)
 => true
2.3.0 :028 > if found_match
2.3.0 :029?>   street_suffix = tokens.last
2.3.0 :030?>   street_rest = tokens[0..-2]
2.3.0 :031?>   # ...
2.3.0 :032 >     puts street_suffix; puts street_rest.join(' ')
2.3.0 :033?>   end
St
105 Main
 => nil


总而言之,您将很难解释地址可能包含的所有变化。我强烈建议使用gem,可能是@oystersauce8提到的
StreetAddress
gem。

你确定单词都应该在字符串的末尾吗?@WiktorStribiżew,因为他说它是后缀,是的,但后缀不是结尾。这就是为什么我认为单词边界更合适的原因。@WiktorStribiżew>在语言学中,后缀(有时也称为后缀或结尾)是放在词干后面的词缀@WiktorStribiżew我知道,我是俄罗斯人=)你确定单词都应该在字符串的末尾吗?@WiktorStribiżew,因为他说它是后缀,是的,但后缀不是结尾。这就是为什么我认为单词边界更合适的原因。@WiktorStribiżew>在语言学中,后缀(有时也称为后缀或结尾)是放在词干后面的词缀@WiktorStribiżew我知道,我是俄罗斯人=)你也能用那块宝石得到“Ave”吗?我没有深入阅读文档,但我的想法是减去街道()得到“Ave”,只是想先在没有宝石的情况下得到它,但如果有问题,我可能会求助于此。你能不能也用那块宝石得到“Ave”?我没有深入阅读文档,但我的想法是减去street()得到“Ave”,只是想先在没有宝石的情况下得到它,但如果有问题,我可能会求助于这个。你忘了写问题。你忘了写问题。