You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:55:06