首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用前瞻性断言regex拆分字符串

使用前瞻性断言regex拆分字符串
EN

Stack Overflow用户
提问于 2015-12-28 02:11:58
回答 1查看 1.3K关注 0票数 4

下面是一个字符串:

代码语言:javascript
复制
[1] "5 15  3 23 11 59 44.7 -.263226218521e-03  .488853402202e-11  .000000000000e+01"

我需要将它除以某些空格,将前7个数字放在一起,如下所示:

代码语言:javascript
复制
[1] "5 15  3 23 11 59 44.7" "-.263226218521e-03"  ".488853402202e-11"  ".000000000000e+01"

因此,我试图使用一个前瞻性正则表达式来除以空格,后面跟着一个点或减号:

代码语言:javascript
复制
strsplit(mystring,"(?=[-.]) +",perl=T)

代码语言:javascript
复制
strsplit(nraw,"(?=[-.])\\s+",perl=T)

但是正则表达式在任何地方都不匹配,原来的字符串是输出的。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-28 02:26:36

如果您想在后面跟着-.的空格上拆分,则需要在找到空格后使用查找。

代码语言:javascript
复制
strsplit(mystring, " +(?=[-.])", perl=TRUE)
#[[1]]
#[1] "5 15  3 23 11 59 44.7" "-.263226218521e-03"   ".488853402202e-11"   
#[4] ".000000000000e+01"

请注意,使用保留词TRUE (即不能重新定义)来代替可以重新定义的T是很好的做法。

如果出于某种原因,您希望先查找,那么您需要同时匹配展望内部的空格和[-.],然后匹配正则表达式之外的相同空间:

代码语言:javascript
复制
strsplit(mystring, "(?= +[-.]) +", perl=TRUE)
[[1]]
[1] "5 15  3 23 11 59 44.7" "-.263226218521e-03"    ".488853402202e-11"    
[4] ".000000000000e+01" 

这是因为前瞻是零宽度的,这意味着它实际上不会消耗这些字符或从初始匹配位置向前移动。在比赛开始时,您可以在比赛开始时将这些相同的空间重新匹配到“向前看”之外。

由于前瞻的零宽度特性,您的原始方法无法工作。实际上,您要求查看当前位置,而不实际向前移动,以查看是否存在.-。然后,如果发现,在同一地点寻找一个或多个空间。在找到.-的地方不可能有一个空间。

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

https://stackoverflow.com/questions/34486910

复制
相关文章

相似问题

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