在R语言中,如何将下划线“_”替换为反斜杠下划线“\_"?

4

问:如何在R字符串中使用反斜杠下划线“\_”替换下划线“_”? 我希望使用stringr包。

另外,有人能解释一下为什么下面的第5行未能获得预期的结果吗?我几乎确定那会起作用。

library(stringr)
s <- "foo_bar_baz"
str_replace_all(s, "_", 5) # [1] "foo5bar5baz"
str_replace_all(s, "_", "\_") # Error: '\_' is an unrecognized escape in character string starting ""\_"
str_replace_all(s, "_", "\\_") # [1] "foo_bar_baz"
str_replace_all(s, "_", "\\\_") # Error: '\_' is an unrecognized escape in character string starting ""\\\_"
str_replace_all(s, "_", "\\\\_") # [1] "foo\\_bar\\_baz"

背景:我使用xtable制作LaTeX表格,由于列名都带有下划线,这会导致LaTeX格式出错,因此需要对列名进行处理。


1
str_replace_all(s, "", "\\") # [1] "foo\_bar\_baz" 正是你想要的,因为 \\\ 表示一个字面上的反斜杠。(你需要理解字符串和它的表示方式之间的区别)。 - Casimir et Hippolyte
你说得对。它正在工作。对我来说仍然很困惑,但它正在工作。感谢你的指引。 - lowndrul
1
在这种情况下,给我的评论点个赞吧,我喜欢那些给我的评论点赞的人,但我也喜欢熊、獾、兔子、小马和独角兽。鸟儿是我的朋友,就像海豚一样。 - Casimir et Hippolyte
1个回答

4

这很简单。使用fixed("_")的帮助,将字面值(literal)字符串替换为带下划线的字面值(literal)字符串,无需使用正则表达式。

> library(stringr)
> s <- "foo_bar_baz"
> str_replace_all(s, fixed("_"), "\\_")
[1] "foo\\_bar\\_baz"

如果您使用cat命令:

> cat(str_replace_all(s, fixed("_"), "\\_"))
foo\_bar\_baz> 

你会发现实际上结果中有1个反斜杠。

很酷,我不知道这个。对我来说,为什么要将“fixed”应用于模式而不是替换并不直观。但它有效 :) - lowndrul
3
那为什么不使用 stringr,可以使用 gsub - gsub("_", "\\_", s, fixed=TRUE)。这更加直观 :) - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接