3

如何从此 html 字符串中 grep 数据项

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

所以结果是100%?主要思想是在> <之间获取数据。

4

2 回答 2

5

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

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

基本上,这会将字符串分成三个部分,每个部分由正则括号(). 然后我们可以使用这些作为反向引用。第一组反向引用匹配的内容可以称为\1(使用双斜杠转义特殊字符),第二组匹配的内容,\2依此类推。

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

一点一点:

  • <.*>表示查找“<”,后跟任意数量的任意字符“.*”,直到找到“>”
  • .*表示匹配任意数量的字符(直到下一个条件)

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

于 2012-10-17T18:06:33.077 回答
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"

我想我曾经在这里找到它,不确定哪个答案。

于 2012-10-17T18:18:45.063 回答