首页 > 解决方案 > 提取以 XX.XXXX 开头的子字符串

问题描述

我有一个字符串

x <- "24.3483 stuff stuff 34.8325 some more stuff"

[0-9]{2}\\.[0-9]{4}表示我要提取的每个子字符串的每个部分的开头。对于上面的示例,我希望输出等效于

[1] "24.3483 stuff stuff"     "34.8325 some more stuff"

我已经看过R split on delimiter (split) keep the delimiter (split)

> unlist(strsplit(x, "(?<=[[0-9]{2}\\.[0-9]{4}])", perl=TRUE))
[1] "24.3483 stuff stuff 34.8325 some more stuff"

不是我想要的,以及如何使用 strsplit 拆分和保留元素?.

标签: rregex

解决方案


您可以使用

x <- "24.3483 stuff stuff 34.8325 some more stuff"
unlist(strsplit(x, "\\s+(?=[0-9]{2}\\.[0-9]{4})", perl=TRUE))
[1] "24.3483 stuff stuff"     "34.8325 some more stuff"

请参阅正则表达式演示R 演示

细节

  • \s+- 1+ 空格(这应该防止在字符串的开头匹配,\\s*\\b如果匹配之前没有空格,您可以将其替换为)
  • (?=[0-9]{2}\.[0-9]{4})- 需要(不消耗文本!)2 位数字.、 和紧靠当前位置右侧的 4 位数字的正向前瞻。

推荐阅读