-1

我正在寻找一种从表示街道地址的字符串中提取街道号码的方法。它必须能够处理多个数字,"7 & 14 Sample Street"以及带有字母的街道号码"221b Baker street",当然还有公寓。

例如

street_address = "123 & 221b Baker Street"

返回:

street_number = "123 & 221b"

street_address = "123/345 Sample Street"

返回:

street_number = "123/345"

基本上,我需要寻找一种从地址中提取门牌号的快速方法,即使该地址比常规的“123 Sample Street”类型地址更复杂。

正则表达式是否可以在字符串中的最后一个数字之后找到第一个空格?并返回该空间之前的所有内容?这似乎是我能想到的最直接的方式。

编辑:谢谢大家的帮助。我想我已经设法处理所有地址:

/\w+(\s?\S{1,3}\s)*/

用空格和/或&符号/斜线/等覆盖地址......我认为

4

3 回答 3

1

因此,问题要求在最后一个数字之后的第一个空格,这就是所谓的后

不幸的是,您要求的是可变长度的后视,大多数正则表达式引擎都不支持,因此最好的办法是捕获数字的整个正则表达式,然后检查长度,如下所示:

s = "123 & 221b Baker Street"
/(^\w+(?:\s\&\s\w+)*)/.match { |m| m[1].try(:length).to_i }
# => 10

s[10..-1]
# => " Baker Street"

注意Object#try在这个答案中使用过,这是一个 Rails Core 扩展。

于 2013-09-02T08:48:50.827 回答
0

试试这个正则表达式/\w+(\s\&\s\w+)*/

s = "123 & 221b Baker Street"
s[/\w+(\s\&\s\w+)*/]
# => "123 & 221b" 

s = "7 & 14 Sample Street"
s[/\w+(\s\&\s\w+)*/]
# => "7 & 14"

s = "221b Baker street"
s[/\w+(\s\&\s\w+)*/]
# => "221b"

注意:如果数字之间的空格可能存在也可能不存在,您可以在*之后放置一个。\s

于 2013-09-02T08:21:46.767 回答
0

怎么样:

^(.*\d\S*)\s+.*$

街道号码在第 1 组中。

于 2013-09-02T07:59:34.920 回答