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

如何在R语言中移除字符串中间的0但保留末尾0?

解决方案

针对你的需求(仅移除100-899范围内字符型数字中间的0,保留末尾的0),可以使用精准的正则表达式实现:

testdata <- c("101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "100", "805", "890")
sub("([1-8])0([1-9])", "\\1\\2", testdata)

输出结果:

[1] "11"  "12"  "13"  "14"  "15"  "16"  "17"  "18"  "19"  "110" "100" "85"  "890"

正则逻辑说明:

  • ([1-8]):匹配第一位1-8的数字(对应你数据集100-899的范围),并捕获为分组1
  • 0:精准匹配中间的0
  • ([1-9]):匹配最后一位非0的数字(1-9),捕获为分组2
  • 替换为\\1\\2:去掉中间的0,直接拼接分组1和分组2

该正则只会处理中间是0且最后一位非0的情况,像110(中间位不是0)、100(末尾是0)这类字符串都会保留原样,完全符合需求。

你之前的代码sub("([1-8])0(.*)", "\\1\\2", testdata)问题在于.*会匹配任意后续字符(包括末尾的0),导致不该替换的场景被错误处理,用[1-9]限定最后一位为非0数字即可避免这个问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:13