【发布时间】:2023-03-08 05:27:01
【问题描述】:
如何从这个 html 字符串中 grep 数据项
a <- "<div class=\"tst-10\">100%</div>"
所以结果是 100%?主要思想是在 > <.> 之间获取数据
【问题讨论】:
如何从这个 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"
我想我在这里找到过一次,不知道是哪个答案。
【讨论】: