如何处理readLines读取后字符串的反斜杠转义恢复(含*SYSTEM*场景)
解决R语言字符串转义恢复问题
问题分析
核心需求是将readLines读取到的多层转义字符串line,还原为原始文件中的目标字符串str,关键要处理*SYSTEM*周边的多层反斜杠转义,最终需满足identical(nline, str)。
从示例可看出:
- 原始字符串
str中,*SYSTEM*前后是单个反斜杠+双引号(即\"*SYSTEM*\") - 读取后的
line中,对应部分变为四个反斜杠+双引号(即\\\\\"*SYSTEM*\\\\\"),这是文件存储转义与readLines读取转义叠加导致的结果。
解决方案
编写函数FUN,分两步处理:
- 提取双引号内的核心内容,去除前后空格、外层双引号及末尾逗号
- 对提取内容做转义还原,将
\\\\\"替换为\"
实现代码
FUN <- function(line) { # 提取双引号内的核心内容 core_str <- sub('^\\s*"([^"]+)",?\\s*$', '\\1', line) # 还原反斜杠转义 nline <- gsub('\\\\\\\\\\"', '\\"', core_str) return(nline) } # 测试验证 str <- "the \"*SYSTEM*\" is REMOVING ROWS and trying to COMPUTE" line <- " \"the \\\\\\\"*SYSTEM*\\\\\\\" is REMOVING ROWS and trying to COMPUTE\", " nline <- FUN(line) identical(nline, str) # 输出TRUE
关键说明
sub('^\\s*"([^"]+)",?\\s*$', '\\1', line):通过正则匹配开头空格、外层双引号,捕获双引号内的全部内容,忽略末尾逗号与空格,精准提取核心字符串。gsub('\\\\\\\\\\"', '\\"', core_str):由于R字符串中单个反斜杠需用两个反斜杠表示,因此用该匹配规则还原文件中原始的转义双引号格式。
内容的提问来源于stack exchange,提问作者mshaffer
相关产品推荐
相关产品推荐

