2

可能重复:
R 正则表达式:http 匹配

我正在使用正则表达式从大量源代码中捕获 URL。

URL 遵循某种模式,格式如下:

  • www.google.com/..../1-1,1"
  • www.google.com/..../1-2,2"
  • www.google.com/..../1-20,20"

到目前为止,我可以使用以下代码访问 url:

pattern = paste("1-", 1:20,",", 1:20, "\"", sep="")

这给了我一个向量:

  • 1-1,1
  • 1-2,2
  • ......
  • 1-20,20

然后我可以使用这些向量给我一个位置或源代码中的 URL。

例如,假设整个源代码很简单:“ http://www.google.com/word/1-1,1 >”

`regexpr("1-1,1", test1k, TRUE)`

给我:

[1] 28 attr(,"match.length") [1] 5

这意味着模式 1-1,1 从长度 28 开始。鉴于此信息,我将如何选择从“ http://ww ...”开始直到结束“1-1,1>”的整个 URL。

我想我要问的是,给位置 28,是否有一个函数可以向后选择最近的“http://”字符串(这标志着 URL 的开始)。同样,给定位置 28,有没有办法选择最近的“>”字符向前(这标志着 URL 的结尾)。

4

1 回答 1

4

与其创建所有可能的组合,不如使用\\d匹配任何数字的字符。例如:

 regexpr("1-\\d+,\\d+", test1k, TRUE)

要选择整个 URL,您希望以“http”开头的正则表达式,然后让它继续直到第一次匹配此模式。一种简单的方法是:

regexpr("http.*?1-\\d+,\\d+", test1k, TRUE)

.*模式分为三个部分。.匹配任何字符,*意味着“该字符的任意数量,并且意味着?它不是贪婪的(否则,这将占用从第一个 http 到最后一个1-\\d+,\\d+.

例如:

> regexpr("http.*1-?\\d+,\\d+", "The URL that you are looking for is http://www.google.com/word/1-1,1", TRUE)
[1] 37
attr(,"match.length")
[1] 32
attr(,"useBytes")
[1] TRUE
于 2012-07-11T00:26:51.520 回答