欧文斯跨过里昂道530号
我需要将上面的行分成以下几个部分:
OWENS CROSS ROA
530 LYONS ROAD分隔符是数字,即530。
我需要读到530,然后分裂成:
欧文斯交叉ROA 里昂道530号
我的尝试:
address.text.split(/([0-9]+)/)输出:
OWENS CROSS ROA 
530里昂路没有被捡起来。
知道怎么解决吗?
发布于 2014-02-17 22:39:06
尝试使用这样的模式:
/\s+(?=\d)/这里的(?=…)是一个正前瞻断言。这将匹配一个或多个空格字符的任何序列,后面跟着一个数字字符,但是由于断言,该数字将不会是匹配字符串的一部分。
例如:
"OWENS CROSS ROA 530 LYONS ROAD".split(/\s+(?=\d)/)
=> ["OWENS CROSS ROA", "530 LYONS ROAD"]发布于 2014-02-17 23:57:54
为了好玩,这里有一个只使用一个基本正则表达式和字符串索引的解决方案:
address_str = 'OWENS CROSS ROA 530 LYONS ROAD'
# String index of digits in address_str
number_location = address_str.index(/\d+/)
address = []
address << address_str[0, number_location]    
address << address_str[number_location, address_str.length]/\d+/的意思是“匹配一个或多个数字”。
发布于 2014-02-18 00:39:26
这不是一个很好的选择使用scan。相反,我会使用一个非常简单的模式来捕获您想要的部分:
pt1, pt2 = /^(.+?) (\d+.+)/.match('OWENS CROSS ROA 530 LYONS ROAD').captures
puts pt1, pt2
# >> OWENS CROSS ROA
# >> 530 LYONS ROADRubular可以帮助您破译。
如果您坚持这样做,您可以使用scan:
'OWENS CROSS ROA 530 LYONS ROAD'.scan(/^(.+?) (\d+.+)/)
# => [["OWENS CROSS ROA", "530 LYONS ROAD"]]但是,您将增加复杂性,要么撤消嵌套的子数组,要么在模式中避免使用捕获。
https://stackoverflow.com/questions/21840689
复制相似问题