首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Regex拆分而不移除测斜仪

使用Regex拆分而不移除测斜仪
EN

Stack Overflow用户
提问于 2014-02-17 22:37:20
回答 3查看 116关注 0票数 2

欧文斯跨过里昂道530号

我需要将上面的行分成以下几个部分:

代码语言:javascript
运行
复制
OWENS CROSS ROA

530 LYONS ROAD

分隔符是数字,即530。

我需要读到530,然后分裂成:

欧文斯交叉ROA 里昂道530号

我的尝试:

代码语言:javascript
运行
复制
address.text.split(/([0-9]+)/)

输出:

代码语言:javascript
运行
复制
OWENS CROSS ROA 
530

里昂路没有被捡起来。

知道怎么解决吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-17 22:39:06

尝试使用这样的模式:

代码语言:javascript
运行
复制
/\s+(?=\d)/

这里的(?=…)是一个正前瞻断言。这将匹配一个或多个空格字符的任何序列,后面跟着一个数字字符,但是由于断言,该数字将不会是匹配字符串的一部分。

例如:

代码语言:javascript
运行
复制
"OWENS CROSS ROA 530 LYONS ROAD".split(/\s+(?=\d)/)
=> ["OWENS CROSS ROA", "530 LYONS ROAD"]
票数 2
EN

Stack Overflow用户

发布于 2014-02-17 23:57:54

为了好玩,这里有一个只使用一个基本正则表达式和字符串索引的解决方案:

代码语言:javascript
运行
复制
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+/的意思是“匹配一个或多个数字”。

票数 0
EN

Stack Overflow用户

发布于 2014-02-18 00:39:26

这不是一个很好的选择使用scan。相反,我会使用一个非常简单的模式来捕获您想要的部分:

代码语言:javascript
运行
复制
pt1, pt2 = /^(.+?) (\d+.+)/.match('OWENS CROSS ROA 530 LYONS ROAD').captures
puts pt1, pt2
# >> OWENS CROSS ROA
# >> 530 LYONS ROAD

Rubular可以帮助您破译

如果您坚持这样做,您可以使用scan

代码语言:javascript
运行
复制
'OWENS CROSS ROA 530 LYONS ROAD'.scan(/^(.+?) (\d+.+)/)
# => [["OWENS CROSS ROA", "530 LYONS ROAD"]]

但是,您将增加复杂性,要么撤消嵌套的子数组,要么在模式中避免使用捕获。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21840689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档