我需要清理一些包含单词和数字或仅包含数字的数据字符串。
下面是一个玩具样本
library(tidyverse)
c("555","Word 123", "two words 123", "three words here 123") %>%
sub("(\\w+) (\\d*)", "\\1|\\2", .)
结果是这样的:
[1] "555" "Word|123" "two|words 123" "three|words here 123"
但是我要放置'|'在最后一组数字之前,如下所示
[1] "|555" "Word|123" "two words|123" "three words here|123"
答案 0 :(得分:2)
您可以使用
^(.*?)\s*(\d*)$
替换为\1|\2
。参见regex demo。
在R中:
sub("^(.*?)\\s*(\\d*)$", "\\1|\\2", .)
详细信息
^
-字符串的开头(.*?)
-捕获组1:尽可能少的0个字符\s*
-零个或多个空格(\d*)
-捕获组2:零个或多个数字$
-字符串的结尾。答案 1 :(得分:1)
我们可以使用sub
来匹配零个或多个空格(\\s*
),后跟一个我们捕获为一组的数字((\\d)
),在替换中使用{{1} },然后是捕获的组的反向引用(|
)
\\1
sub("\\s*(\\d)", "|\\1", v1)
#[1] "|555" "Word|123"
#[3] "two words|123" "three words here|123"