如何在R语言中将\""替换为\"""?
TSV文件含转义双引号的电子表格识别问题及R语言解决办法
问题场景
我有一个TSV文件,部分字段包含转义双引号(\"),格式本身合规,但当双引号分隔符(DQM)出现在转义双引号之后时,用电子表格打开会无法识别该分隔符,导致后续字段与前一个字段合并。
示例行内容:
"9812" "tt0167609" "tvSeries" "L'homme du \"Picardie\"" "L'homme du \"Picardie\"" 0 "1968" "\N" "13" "Drama"
电子表格打开后,前3个字段识别正常,但第4个字段会包含到1968;正确识别应该是第4个字段为"L'homme du \"Picardie\"",第5个字段为相同内容,后续字段依次对应。问题根源是电子表格无法识别\"之后的"作为分隔符,调整电子表格打开选项无效。
目前在文本编辑器中将\""替换为\"""可以解决问题,但希望在生成文件时用R语言实现该替换,之前尝试多种字符串组合均未成功,比如:
tv.Subset <- str_replace(tv.Subset, "\\\"\"", "\\\"\"\""):简单转义每个字符tv.Subset <- str_replace(tv.Subset, '\\\"\"', '\\\"\"\"'):尝试用单引号作为分隔符tv.Subset <- str_replace(tv.Subset, "\\\\\"\"", "\\\\\"\"\""):按资料用双反斜杠兼顾R和正则规则
解决方法
核心问题在于R的字符串转义和正则表达式转义的双重规则,同时要注意全局替换(str_replace仅替换第一个匹配项,需用gsub):
方法1:用单引号包裹正则与替换字符串
# 全局替换所有 \"\" 序列为 \"\"\" tv.Subset <- gsub('\\\\""', '\\\\"""', tv.Subset)
- 正则部分
'\\\\""':在R单引号字符串中,\\\\表示一个实际的\,\"表示一个实际的",组合后匹配文本中的\""序列。 - 替换部分
'\\\\"""':同理,生成文本中的\"""序列。
方法2:用双引号包裹(需更多转义)
tv.Subset <- gsub("\\\\\"\"", "\\\\\"\"\"", tv.Subset)
- 双引号字符串中,
\"表示实际的",\\\\表示实际的\,因此正则部分"\\\\\"\""对应文本中的\"",替换部分对应\"""。
关键注意点
- 必须使用
gsub而非str_replace,确保所有出现的\""都被替换,而不是仅第一个。 - 转义规则:R字符串中
\需转义为\\,正则表达式中\同样需转义,因此匹配一个实际的\需要写\\\\。
内容的提问来源于stack exchange,提问作者kq76
相关产品推荐
相关产品推荐

