使用stringr解析网页

使用stringr解析网页,r,regex,stringr,R,Regex,Stringr,我有一个项目,我试图从网页中提取数字。下面是我试图解析的文本示例 “\n区域= [\n[107447478,249019255591016962,0,18,0,1110,],\n[107447440,236618005651033811,1,46,0,0,23,],\n[107447521,293323965439439211566,0,0,0115,];\n] =[\n];\n$(函数(){\n$(\“.typeTip\”).attr(\“title\”,\“T=Trad,S=Sport,TR

我有一个项目,我试图从网页中提取数字。下面是我试图解析的文本示例

“\n区域= [\n[107447478,249019255591016962,0,18,0,1110,],\n[107447440,236618005651033811,1,46,0,0,23,],\n[107447521,293323965439439211566,0,0,0115,];\n] =[\n];\n$(函数(){\n$(\“.typeTip\”).attr(\“title\”,\“T=Trad,S=Sport,TR=Toprope\”);\n showTips();\n});\n

我正在寻找粗体的数字,所以在“\n[”和“,”之间的任何数字。我试图用R中的stringr包来实现这一点,但我对正则表达式并不十分熟悉,所以我要特别指出。

这是有效的:

x <- "\naAreas = [\n[107447478,2490,1925,559,1016,962,0,18,0,1,110,],\n[107447440,2366,1800,565,1033,811,1,46,0,0,23,],\n[107447521,2933,2396,543,921,1566,0,11,0,0,115,]\n];\naRoutes = [\n];\n$(function() {\n $(\".typeTip\").attr(\"title\", \"T=Trad, S=Sport, TR=Toprope\");\n showTips();\n});\n"

stringr::str_extract_all(x, '(?<=\n\\[)\\d+')
## [[1]]
## [1] "107447478" "107447440" "107447521"
x这是有效的:

x <- "\naAreas = [\n[107447478,2490,1925,559,1016,962,0,18,0,1,110,],\n[107447440,2366,1800,565,1033,811,1,46,0,0,23,],\n[107447521,2933,2396,543,921,1566,0,11,0,0,115,]\n];\naRoutes = [\n];\n$(function() {\n $(\".typeTip\").attr(\"title\", \"T=Trad, S=Sport, TR=Toprope\");\n showTips();\n});\n"

stringr::str_extract_all(x, '(?<=\n\\[)\\d+')
## [[1]]
## [1] "107447478" "107447440" "107447521"

x如果只想捕获数字,可以尝试以下方法:

(?:\\n\[)(\d+)

如果您只想捕获数字,可以尝试以下方法:

(?:\\n\[)(\d+)

stringr
构建于
stringi
之上。这是一种使用
stringi
V8
的不同方法,因为这里有javascript:

library(V8)
library(stringi)

js <- "\naAreas = [\n[107447478,2490,1925,559,1016,962,0,18,0,1,110,],\n[107447440,2366,1800,565,1033,811,1,46,0,0,23,],\n[107447521,2933,2396,543,921,1566,0,11,0,0,115,]\n];\naRoutes = [\n];\n$(function() {\n $(\".typeTip\").attr(\"title\", \"T=Trad, S=Sport, TR=Toprope\");\n showTips();\n});\n"

ctx <- v8()
然后获取数据:

ctx$get("aAreas")
##           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 107447478 2490 1925  559 1016  962    0   18    0     1   110
## [2,] 107447440 2366 1800  565 1033  811    1   46    0     0    23
## [3,] 107447521 2933 2396  543  921 1566    0   11    0     0   115
或者,只是我们想要的部分:

ctx$get("aAreas")[,1]
## [1] 107447478 107447440 107447521

stringr
构建于
stringi
之上。这是一种使用
stringi
V8
的不同方法,因为这里有javascript:

library(V8)
library(stringi)

js <- "\naAreas = [\n[107447478,2490,1925,559,1016,962,0,18,0,1,110,],\n[107447440,2366,1800,565,1033,811,1,46,0,0,23,],\n[107447521,2933,2396,543,921,1566,0,11,0,0,115,]\n];\naRoutes = [\n];\n$(function() {\n $(\".typeTip\").attr(\"title\", \"T=Trad, S=Sport, TR=Toprope\");\n showTips();\n});\n"

ctx <- v8()
然后获取数据:

ctx$get("aAreas")
##           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 107447478 2490 1925  559 1016  962    0   18    0     1   110
## [2,] 107447440 2366 1800  565 1033  811    1   46    0     0    23
## [3,] 107447521 2933 2396  543  921 1566    0   11    0     0   115
或者,只是我们想要的部分:

ctx$get("aAreas")[,1]
## [1] 107447478 107447440 107447521
关于
\\n\[(\d+)
?我相信R支持lookbehinds,所以,假设我是正确的,你可以实际使用
(?关于
\\n\[(\d+)
?我相信R支持lookbehinds,所以,假设我是正确的,你可以实际使用
(?这不会捕获
\\n\[
,但它会匹配它。例如,这不起作用
stringr::str_extract_all(x),(?:\\n\\\[)(\\d+)
这不会捕获
\\n\[
,但它会匹配它。例如,这不起作用
stringr::str_extract_all(x),(?:\\n\\\\[)(\\d+)