【问题标题】:How to parse html string using R?如何使用 R 解析 html 字符串?
【发布时间】:2023-03-08 05:27:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: regex r


    【解决方案1】:

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

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

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

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

    一块一块的:

    • &lt;.*&gt; 说要查找“”
    • .* 表示匹配任意数量的字符(直到下一个条件)

    记住这一点,您实际上可能使用gsub("(.*&gt;)(.*)(&lt;.*)", "\\2", a) 并获得相同的结果。

    【讨论】:

    • 谢谢,完美运行,你能解释一下它是怎么做的吗?
    • @jrara,我已经更新了我的答案,试图解释它的作用。不过,老实说,我在解释正则表达式方面很糟糕
    【解决方案2】:

    我总是使用这个正则表达式来删除 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"
    

    我想我在这里找到过一次,不知道是哪个答案。

    【讨论】:

    • 很好地呼吁可能需要提取所有 html 标签,而不仅仅是匹配特定模式。 +1
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多