检索R中标签内的文本

时间:2013-08-11 14:43:00

标签: regex r tags

我正在尝试从包含标签的文本文件中检索信息,例如:

<name> Joe </name>

文本文件由多行组成,其中一些带有更多这些标签(例如高度和重量),有些带有其他文本。我将文本文件称为“工作表”(参见下面的代码)。

我想检索标签之间的文本。我已经提出了以下解决方案:

m1 <- regexpr("<name> [a-zA-Z]+ </name>", sheet)
m2 <- regmatches(sheet,m1)
m3 <- gsub("<name> ", "", gsub(" </name>", "", m2))
m3

我之前没有使用过正则表达式,但我想知道我是不是在绕着'regmatches'走弯路。似乎应该有更直接的方法来检索标签内的文本?

谢谢,

理查德

1 个答案:

答案 0 :(得分:4)

您可以通过一次gsub电话执行此操作。因此,您可以通过()围绕模式来创建群组。可以使用数字\\1(反向引用)访问该组,例如:

sheet <- "<name>foobar</name>"
gsub(pattern="<name>([a-zA-Z]+)</name>", replacement="\\1", x=sheet)
# [1] "foobar"

但正如@DieterMenne建议你应该尝试HTML的 XML 包(它支持XPath):

library("XML")
doc <- xmlParse("<html><name>foobar</name></html>")
xpathSApply(doc, "//name", xmlValue)
# [1] "foobar"