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

Replacing multiple string intervals in R

我目前正在处理一个包含两行 header 行的数据(第一行作为整体类别描述,第二行包含子类别。恰好两者都包含各种 <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",这是我不想要的。由于事实,我仍然想要:
text... in the office on the activities below. Total must add up to 100%

如果有人知道如何解决它。非常感谢。

谢谢!

您当前的正则表达式是 greedy 并且正在消耗第一个左括号和最后一个右括号之间的所有内容。一种快速解决方法是使用 ?:

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

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

Demo

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

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

这将删除开始和结束标签之间的所有内容(包括标签)。那应该给你你想要的。