R语言:如何拆分字符串提取开头1-2位数字前缀?
拆分字符串的数字前缀与剩余字符
你需要将以1-2位数字开头的字符串,按第一个非数字字符的位置拆分为数字前缀和剩余字符两列,使用separate函数结合正确的正则表达式即可实现。
问题分析
你之前的正则表达式"(?=[0-9])(?<=[a-zA-Z])"逻辑错误:它匹配的是前面是字母、后面是数字的位置,这和你需要的「前面是数字、后面是非数字」的拆分位置完全相反。
正确实现
使用零宽断言匹配「最后一个数字之后、第一个非数字之前」的位置,正则表达式为"(?<=\\d)(?=\\D)":
(?<=\\d):反向预查,确保前面是数字(?=\\D):正向预查,确保后面是非数字
完整代码如下:
library(tidyverse) have <- tribble( ~string, '12main', '6six', '42go', '5to9' ) want <- have %>% separate(string, into = c('prefix', 'rest'), sep = "(?<=\\d)(?=\\D)") print(want)
运行后得到的结果与你期望的一致:
# A tibble: 4 × 2 prefix rest <chr> <chr> 1 12 main 2 6 six 3 42 go 4 5 to9
补充说明
如果你的字符串后续包含数字(比如示例中的5to9),这个正则依然有效,因为它只匹配第一个非数字字符出现的位置,不会受后续字符影响。
内容的提问来源于stack exchange,提问作者pyll
相关产品推荐
相关产品推荐

