使用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=Toprope\”);\n showTips();\n});\n 我正在寻找粗体的数字,所以在“\n[”和“,”之间的任何数字。我试图用R中的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
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+)