【问题标题】:grep() functiongrep() 函数
【发布时间】:2013-01-08 20:00:38
【问题描述】:

我已经做了一些网页抓取,并有一个字符串 my_html 和我想要的链接

我想grep() 并尝试过(my_html 的示例,它要长得多)

my_html <- 'stuff more stuff ...
<TD ><A CLASS=my_link HREF=\"https://www.stuff.com/secure-bin/my_club/myrep.cgi/tpw9109.cry?scrtpw9109.cry\">
other stuff
<p> www.google.com </p>
end'



my_pattern <- "<TD><A CLASS=my_link HREF=*>"
grep(my_pattern,x=my_html,value=TRUE)

让我感动

character(0)

我认为问题与模式中的特殊字符有关,但我不知道解决方法。

【问题讨论】:

  • fixed=TRUE 作为grep 的参数有帮助吗?
  • '*' 在 R 正则表达式中并不表示“任何东西”,它表示“零个或多个前面的字符”。 &lt;td&gt; 也不会匹配 &lt;td &gt;
  • 刚刚添加了一个示例字符串
  • 部分不匹配是因为在my_html (&lt;TD &gt;) 中TD 后面有一个空格,但在您的正则表达式 (&lt;TD&gt;) 中没有。
  • @Josh:谢谢,我纠正了错字。仍然没有工作。但 Dwin 的解决方案奏效了。

标签: r regex web-scraping


【解决方案1】:
> sub( '(^.+HREF=\\\")(.+)(\".+)', "\\2", my_html)
[1] "https://www.stuff.com/secure-bin/my_club/myrep.cgi/tpw9109.cry?scrtpw9109.cry"

基本上丢弃HREF=\" 之前的任何内容,使用两个反斜杠表示单个反斜杠,使用\" 表示双引号。然后包含下一个双引号之前的任何内容作为第二个匹配部分,以及从该标记到结尾的任何内容作为第三部分。所以它应该只返回中间匹配部分(如果存在的话)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2012-06-20
    • 2011-05-25
    • 2016-10-05
    相关资源
    最近更新 更多