如何从这个html字符串grep数据项
a <- "<div class=\"tst-10\">100%</div>"
这样结果是100%?主要思想是在&gt;之间获取数据。 &LT;
答案 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上找到它,不知道答案是什么。