繁体   English   中英

如何在R中使用gsub用单个反斜杠替换字符串?

[英]How to replace a string with a single backslash using gsub in R?

我喜欢编码UTF-8字符串。 在我的数据中,字符用=分隔,因为RI中的函数encoding需要用\\x分隔

string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <-  gsub("=", "\x", string)
Encoding(x)
Encoding(x) <- "latin1"
x

我试图添加一,二,三个反斜杠来逃避。 放在圆括号和方括号中。 添加引号。 将参数fixed=F 在这里这里这里阅读,仍然不知道如何做。

预期产量:

.01 Répondeur

当我使用两个反斜杠(如Wiktor所说)并使用cat()检查时,输出中只有一个反斜杠,但仅当我手动更改时,它对encoding()无效。

编辑:

例如,当我执行此操作时,它会放两个反斜杠,而endcoding不起作用:

> gsub("=", "\\x", string, fixed=TRUE)
[1] "\\x2E\\x30\\x31\\x20\\x52\\xC3\\xA9\\x70\\x6F\\x6E\\x64\\x65\\x75\\x72"

与亚历山大·沃伊托夫(Aleksandr Voitov)的建议相同:

> gsub("=", "\\\\x", string)
[1] "\\x2E\\x30\\x31\\x20\\x52\\xC3\\xA9\\x70\\x6F\\x6E\\x64\\x65\\x75\\x72"
x <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"  # string data
x <- strsplit(x, "=", useBytes = FALSE )[[1]]       # split string
x <- x[nchar(x) > 0]                               # remove elements with 0 character length

使用strtoi

# convert string to integer and convert integer to raw and then to character
rawToChar( as.raw( strtoi(x, base = 16L) ) )                  
# [1] ".01 Répondeur"

?strtoi文件页面说

十六进制常量(前缀0x或0X)被解释为以8和16为底

使用as.hexmode将字符转换为十六进制格式

rawToChar( as.raw( as.hexmode( x ) ) )
# [1] ".01 Répondeur"

您可以使用gsub("=", "\\\\x", string, fixed=TRUE)=替换= \\x ,然后parse结果字符串:

string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <- parse(text = paste0("'", gsub("=", "\\x", string, fixed=TRUE), "'"))
x[[1]]
## => ".01 Répondeur"

请参阅在线R演示

这是另一个基于Unicode包的解决方案:

> library(Unicode)
> string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
> x1 <- gsub("=", " U+", string, fixed=TRUE)
> y <- unlist(strsplit(trimws(x1), "\\s+"))
> intToUtf8(as.u_char_seq(y))
[1] ".01 Répondeur"

在这里,我将all =替换为space + U+ ,然后在修剪输入后用1+个空格符号分割字符串。 intToUtf8(as.u_char_seq(y))从Unicode字符序列创建Unicode字符串。

string <- "=2E=30=31=20=52=C3=A9=70=6F=6E=64=65=75=72"
x <-  gsub("=", "\\\\x ", string)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM