R语言文本清洗求助:如何同时移除短横线(-)与换行符( )?
解决R中文本清洗时短横线与换行符的循环问题
看起来你踩了一个正则表达式匹配的小坑!问题出在你写的替换规则和文本里的实际格式不匹配,导致每次只处理了一半的问题,陷入循环。
问题根源
你的原始文本里是abc- d(短横线后带空格),但你用的移除短横线的代码是gsub(" - ", " ", df1$text)——这个正则表达式是匹配空格+短横线+空格的组合,根本匹配不到你文本里的- (短横线+空格)!而当你先替换换行符时,文本里的换行被换成空格,变成了abc-d(短横线前后无空格),就更匹配不到了;反过来替换短横线时,你可能误把短横线直接换成空格,导致原本被短横线“隐藏”的换行符显现出来,变成abc\nd。
解决方案
用一个正则表达式一次性处理所有短横线和空白字符(包括换行、空格)的组合,再清理多余空格:
# 第一步:替换所有 "-" 前后的任意空白字符(包括换行)为单个空格 df1$text <- gsub("\\s*-\\s*", " ", df1$text) # 第二步:把多个连续的空格合并成一个(避免替换后出现多个空格) df1$text <- gsub("\\s+", " ", df1$text)
验证方法
如果不确定文本里的字符到底是什么,可以用charToRaw()查看真实编码,比如取第一个文本的片段:
# 提取文本片段查看 sample_text <- substr(df1$text[1], 15, 25) print(sample_text) # 查看每个字符的十六进制编码 charToRaw(sample_text)
- 空格的编码是
0x20,换行符是0x0a,普通短横线是0x2d,如果是软连字符会是0xad,这样就能精准调整正则表达式。
测试效果
用你的原始数据测试:
原始文本:
Id text 1 I have learnt abc- d in school. 2 I want app- le. 3 Going to sc- hool is fun
执行代码后,会变成:
Id text 1 I have learnt abc d in school. 2 I want app le. 3 Going to sc hool is fun
这样就能一次性解决循环问题啦!
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

