替换R中的多个字符串间隔

时间:2017-06-28 23:52:18

标签: r gsub

我目前正在处理一个数据sat,它有两个标题行(第一个作为整体类别描述,第二个包含子类别。而恰好是两个都包含各种<text>间隔。例如:

在第一行(数据框的列名)中,我有一个包含以下内容的单元格:
- 文字...... <span style=\"text-decoration: underline;\">in the office</span> on the activities below. Total must add up to 100%. <br /><br />

第二行包含多个单元格:
- 文字<strong>
- 文字</strong>

现在,我能够通过以下方法解决如何删除第二行中的所有<text>间隔:
data[1,] = gsub("<.*>", "", data[1,])

但是,对于列名称行,如果我使用:
colnames(data) = gsub("<.*>", "",colnames(data))
我最后只是“文字”,我不想要。由于这个事实,我仍然想要:
text... in the office on the activities below. Total must add up to 100%

如果有人知道如何解决它。我真的很感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您当前的正则表达式是贪婪并且消耗了第一个开始括号和最后一个结束括号之间的所有内容。一个快速解决方法是使用?

使您的正则表达式不贪婪
data[1,] = gsub("<.*?>", "", data[1,])

请注意,使用正则表达式解析HTML通常不是一个好主意。如果您打算对嵌套内容进行任何操作,那么您应该考虑使用可以解析HTML内容的R包。

Demo

答案 1 :(得分:1)

您可以通过以下方式更改正在使用的正则表达式来获得所需内容:

colnames(data) <- gsub("<[^>]+>", "",colnames(data))

这将删除开始和结束标记之间的任何内容(包括标记)。这应该会给你你想要的东西。