如何替换包含#的文本值

时间:2014-11-20 15:51:11

标签: regex r string text

在我的数据集中,我有一个包含html代码的值的变量,例如: <font color="#800080">None of these</font>

我想用Other替换它:

df$Country <- gsub("<font color="#800080">None of these</font>", "Other", df$Country)

然而,这不起作用,这可能是由# - 字符引起的。我该如何解决这个问题?

部分数据:

structure(c(2L, 1L, 1L, 1L, 1L), .Label = c("Spain", "<font color=\"#800080\">None of these</font>"), class = "factor")

2 个答案:

答案 0 :(得分:2)

html上的正则表达式的所有这些问题都是不使用它的原因。假设您的数据是作为实际的html文档开始的,请改用XPath。这是一个例子:

html.text <- '<html>
<head></head>
<body>
<div><font color="#800080">None of these</font></div>
</body>
<html>'

library(XML)
html <- htmlTreeParse(html.text,useInternalNodes=TRUE)
replaceNodes(html['//font[@color="#800080"]'][[1]],"Other")
# <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# <html>
# <head></head>
# <body>
# <div>Other</div>
# </body>
# </html>

答案 1 :(得分:1)

有两种选择可供选择。两者都假设我们从看起来像这样的东西开始。

x <- '<font color="#800080">None of these</font>'
  1. 选项1:使用不同的引用。当您使用双引号来识别您的&#34;模式&#34;参数,它结束于它遇到的下一个双引号,它出现在#之前。因此,您可以尝试用单引号括起模式。

    gsub('<font color="#800080">None of these</font>', "other", x)
    
  2. 选项2:转义引号字符。这就像在引号前加\以表明它应该被转义一样简单。

    gsub("<font color=\"#800080\">None of these</font>", "other", x)