我正在尝试从包含标签的文本文件中检索信息,例如:
<name> Joe </name>
文本文件由多行组成,其中一些带有更多这些标签(例如高度和重量),有些带有其他文本。我将文本文件称为“工作表”(参见下面的代码)。
我想检索标签之间的文本。我已经提出了以下解决方案:
m1 <- regexpr("<name> [a-zA-Z]+ </name>", sheet)
m2 <- regmatches(sheet,m1)
m3 <- gsub("<name> ", "", gsub(" </name>", "", m2))
m3
我之前没有使用过正则表达式,但我想知道我是不是在绕着'regmatches'走弯路。似乎应该有更直接的方法来检索标签内的文本?
谢谢,
理查德
答案 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"