OWENS CROSS ROA 530 LYONS ROAD
我需要将以上行拆分为以下内容:
OWENS CROSS ROA
530 LYONS ROAD
分隔符是数字,即530。
我需要读取最多530,然后拆分为:
OWENS CROSS ROA
530 LYONS ROAD
我的尝试:
address.text.split(/([0-9]+)/)
输出:
OWENS CROSS ROA
530
LYONS ROAD没有被接走。
知道怎么解决吗?
答案 0 :(得分:2)
尝试使用这样的模式:
/\s+(?=\d)/
(?=…)
这里是positive lookahead assertion。这将匹配一个或多个空格字符的任何序列,后面跟一个数字字符,但由于断言,数字将不是匹配字符串的一部分。
例如:
"OWENS CROSS ROA 530 LYONS ROAD".split(/\s+(?=\d)/)
=> ["OWENS CROSS ROA", "530 LYONS ROAD"]
答案 1 :(得分:0)
只是为了好玩,这里只使用一个基本正则表达式和字符串索引的解决方案:
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+/
仅表示“匹配一个或多个数字。”
答案 2 :(得分:0)
这不适合使用scan
。相反,我会使用一个非常简单的模式来捕捉你想要的部分:
pt1, pt2 = /^(.+?) (\d+.+)/.match('OWENS CROSS ROA 530 LYONS ROAD').captures
puts pt1, pt2
# >> OWENS CROSS ROA
# >> 530 LYONS ROAD
Rubular可以帮助您decipher it。
如果您坚持, 可以<{1}}执行此操作:
scan
但是你要添加复杂性,要么撤消嵌套的子数组,要么在模式中添加以避免使用捕获。