-
-
看起来像
qdap.transcript
不
是特殊字符,但只是字面上的“e1><b8><9d>”。所以如果你试图删除特殊字符,
gsub
愉快地遵守,并删除“<”和“>”,留下“e1”等。
为了解决您的问题,我认为您需要转换回特殊字符,然后使用
stri_trans_general
从
stringi
包裹我肯定还有其他类似的功能,但这一个对我很有用。事实证明,转换回特殊字符是困难的部分,但我有一些工作代码:
library(stringi)
mystring <- 'If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!'
pos <- gregexpr('(<[A-Fa-f0-9]{2}>)+', mystring)[[1]]
replace <- substring(mystring, pos, pos+attr(pos, 'match.length')-1)
replace <- sapply(replace, function(r) {
eval(parse(text=paste0('\'', gsub('>', '', gsub('<', '\\\\x', r)), '\'')))
})
for(i in seq_along(replace)) {
mystring <- sub('(<[A-Fa-f0-9]{2}>)+', replace[i], mystring)
}
mystring <- stri_trans_general(mystring, 'latin-ascii')
我们首先提取所有在“<”和“>”之间看起来像十六进制的值,然后将它们转换为文字“\xe1\xb8\x9d”,然后让R处理这些值,并用这些替换值替换旧值。
仅在最后一行,我们将特殊字符替换为(在本例中为)“e”