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

如何用gsub()删除指定空格时保留ASCII>128的非打印字符?

解决方法

问题核心是\\s正则表达式会匹配所有Unicode空白字符,包括你需要保留的ASCII 160(非断空格,对应Unicode U+00A0)。要只删除普通空格(ASCII 32),直接把正则里的\\s替换为普通空格即可:

column_utf8 <- iconv(inData$column, from="ISO-8859-1", to="UTF-8")
# 仅删除末尾的普通空格
column_utf8_notrailing <- gsub(" +$", "", column_utf8)
# 仅删除竖线前的普通空格
column_utf8_notrailing_noembedded <- gsub(" +\\|", "\\|", column_utf8_notrailing)
outData <- data.frame(column_utf8, column_utf8_notrailing_noembedded)

如果需要覆盖更多ASCII类空白(比如制表符、换行符)但仍排除非断空格,可以用[ \\t\\r\\n]替代普通空格,这样只会匹配ASCII范围内的空白字符,不会影响ASCII 160这类扩展字符。

你之前添加useBytes=TRUE后出现ASCII 194,是因为ASCII 160在UTF-8中是双字节编码(0xC2 0xA0),强制按字节处理时仅删除了第二个字节,剩余的0xC2对应ASCII 194,这不是合理的处理方式,因此不要使用该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:18:26