如何在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的范围),并捕获为分组10:精准匹配中间的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
相关产品推荐
相关产品推荐

