【问题标题】:retrieve text inside tags in R在R中检索标签内的文本
【发布时间】:2013-08-11 14:43:00
【问题描述】:

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

<name> Joe </name>

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

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

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

我以前没有使用过正则表达式,但我想知道我的“正则匹配”是不是绕道而行。似乎应该有更直接的方法来检索标签内的文本?

谢谢,

理查德

【问题讨论】:

  • 您的示例看起来像 HTML 或 XML;如果是,即围绕它有一个正式的结构,可能会有更好的解决方案,例如使用 XML 包。

标签: regex r tags


【解决方案1】:

您可以通过一个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"

【讨论】:

  • 感谢 sgibb 和@DieterMenne。我不知道 XML 包,并将对其进行研究。该文件不是 HTML,但确实是结构化的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2020-08-12
  • 2019-05-10
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多