如何从此 html 字符串中 grep 数据项
a <- "<div class=\"tst-10\">100%</div>"
所以结果是100%?主要思想是在> <之间获取数据。
我会gsub()
在这种情况下使用:
gsub("(<.*>)(.*)(<.*>)", "\\2", a)
[1] "100%"
基本上,这会将字符串分成三个部分,每个部分由正则括号(
和)
. 然后我们可以使用这些作为反向引用。第一组反向引用匹配的内容可以称为\1
(使用双斜杠转义特殊字符),第二组匹配的内容,\2
依此类推。
所以,本质上,我们说的是解析这个字符串,找出符合我的条件的内容,然后只返回第二个反向引用。
一点一点:
<.*>
表示查找“<”,后跟任意数量的任意字符“.*”,直到找到“>”.*
表示匹配任意数量的字符(直到下一个条件)牢记这一点,您实际上可能会使用gsub("(.*>)(.*)(<.*)", "\\2", a)
并获得相同的结果。
我总是使用这个正则表达式来删除 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"
我想我曾经在这里找到它,不确定哪个答案。