如何使用R解析html字符串?

时间:2012-10-17 17:59:33

标签: regex r

如何从这个html字符串grep数据项

a <- "<div class=\"tst-10\">100%</div>"

这样结果是100%?主要思想是在&gt;之间获取数据。 &LT;

2 个答案:

答案 0 :(得分:5)

在这种情况下我会使用gsub()

gsub("(<.*>)(.*)(<.*>)", "\\2", a)
[1] "100%"

基本上,这会将字符串分成三部分,每部分用常规括号()分隔。然后我们可以将它们用作反向引用。与第一组反向引用匹配的内容可以称为\1(使用双斜杠来转义特殊字符),第二组匹配的内容\2等等。

所以,基本上,我们说要解析这个字符串,找出符合我条件的内容,并只返回第二个反向引用。

一块一块:

  • <.*>说找一个“&lt;”然后是任意数量的任何字符“。*”直到你进入“&gt;”
  • .*表示匹配任意数量的字符(直到下一个条件)

记住这一点,你实际上可能会使用gsub("(.*>)(.*)(<.*)", "\\2", a)并获得相同的结果。

答案 1 :(得分:4)

我总是使用这个正则表达式删除HTML标记:

gsub("<(.|\n)*?>","",a)

给出:

[1] "100%"

与mrdwab的不同之处在于我只是从html标签中删除每个html标签及其摘录内容,这可能更适合此示例。如果有更多标签,请注意两者都会给出不同的结果:

> gsub("(<.*>)(.*)(<.*>)", "\\2", paste(a,"<lalala>foo</lalala>"))
[1] "foo"

> gsub("<(.|\n)*?>","", paste(a,"<lalala>foo</lalala>"))
[1] "100% foo"

我认为我曾在SO上找到它,不知道答案是什么。