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

R语言如何截断字符串保留首个三位数字及之前的内容

字符串截断保留首个三位数字的R实现

原有代码失效原因

你之前写的正则[100-999]是错误写法:正则的方括号[]仅用于匹配单个字符,[100-999]并不会识别100-999区间的三位数字,实际生效的匹配规则是命中0-9之间的任意单个数字。执行替换时会从第一个碰到的数字字符开始,把后续所有内容清空,最终只会得到c("MTH","LB","PHY")的错误结果。

可直接运行的正确代码

通过捕获组保留字符串开头到第一个连续三位数字的片段,删除后续所有内容即可,base R环境下无需加载额外包:

# 原始数据
a <- c("MTH314PHY410","LB471LB472","PHY472CHM141")
# 替换处理
b <- gsub("(^.*?\\d{3}).*", "\\1", a)

运行后b的输出就是预期结果:c("MTH314","LB471","PHY472")。

正则逻辑说明

  • (^.*?\\d{3}):用非贪婪匹配规则,从字符串开头定位到第一次出现的连续3位数字,把这部分整体标记为需要保留的第一个捕获组
  • .*:匹配三位数字之后到字符串末尾的所有内容
  • 替换值\\1代表仅保留第一个捕获组的内容,实现三位数字后内容的截断删除。

如果习惯用stringr包做字符串处理,还可以用更简洁的提取写法:

library(stringr)
b <- str_extract(a, "^.*?\\d{3}")

内容的提问来源于stack exchange,提问作者beevis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:30:57