【问题标题】:Get only the main page from an URL using regex使用正则表达式从 URL 获取主页
【发布时间】:2022-11-18 03:41:22
【问题描述】:

我正在尝试获取多个网页的名称,这是我拥有的数据集的示例:

c("https://arealdata-api.miljoeportal.dk/download/dai/BES_NATURTYPER_SHAPE.zip", 
"https://download.kortforsyningen.dk/content/matrikelkortet", 
"https://b0902-prod-dist-app.azurewebsites.net/geoserver/wfs", 
"https://sit-ftp.statens-it.dk/main.html", 
"https://arealdata.miljoeportal.dk/datasets/saerligtudpejede", 
"https://miljoegis3.mim.dk/spatialmap?profile=privatskovtilskud", 
"https://envs.au.dk/fileadmin/envs/Hjemmeside_2018/Zip_filer/Basemap03_public_geotiff.zip", 
"https://arealdata-api.miljoeportal.dk/download/dai/BES_VANDLOEB_SHAPE.zip", 
"https://wfs2-miljoegis.mim.dk/vp3basis2019/ows?service=WFS&version=1.0.0&request=GetCapabilities", 
"httphttps://datasets.catalogue.data.gov.dk/dataset/ramsaromrader", 
"https://ens.dk/service/statistik-data-noegletal-og-kort/download-gis-filer", 
"https://miljoegis.mim.dk/cbkort?profile=miljoegis-raastofferhavet", 
"https://www.marineregions.org/", 
"https://CRAN.R-project.org/package=geodata>.", 
"https://miljoegis3.mim.dk/spatialmap?profile=vandprojekter", 
"https://landbrugsgeodata.fvm.dk/")

作为第一个入口的例子,我想获取网页“https://arealdata-api.miljoeportal.dk/”没有地址的其余部分,所以擦除“下载/dai/BES_NATURTYPER_SHAPE.zip”.

我在想一些东西,比如把所有东西都放在 https:// 和之后的第一个 / 之间。

这些是我到目前为止尝试过的变体:

# 1
URLS <- gsub(".*?//", "", URLS)

# 2
URLS <- gsub("http://", "", URLS)

# 3
URLS <- gsub(".*?//", "", URLS)

# 4
URLS <- gsub("/.*", "", URLS)

这些都不起作用。

【问题讨论】:

  • 抱歉,我无法在链接的重复问题中找到该问题的答案?!有人可以指点我吗?否则,我主张取消删除@akrun 清楚地回答了这个问题的答案。

标签: r regex string gsub


【解决方案1】:

我们可以通过从字符串的开头 (^) 匹配一个或多个不是 : ([^:]+) 的字符来捕获 ((...)) 子字符串,然后是 : 和两个斜杠 // , 后跟不是斜杠和斜杠的字符,并将其余字符留在组外 (.*),替换为捕获组的反向引用 (\1)

 sub("^([^:]+://[^/]+/).*", "\1", URLS)

-输出

[1] "https://arealdata-api.miljoeportal.dk/"         "https://download.kortforsyningen.dk/"          
 [3] "https://b0902-prod-dist-app.azurewebsites.net/" "https://sit-ftp.statens-it.dk/"                
 [5] "https://arealdata.miljoeportal.dk/"             "https://miljoegis3.mim.dk/"                    
 [7] "https://envs.au.dk/"                            "https://arealdata-api.miljoeportal.dk/"        
 [9] "https://wfs2-miljoegis.mim.dk/"                 "httphttps://datasets.catalogue.data.gov.dk/"   
[11] "https://ens.dk/"                                "https://miljoegis.mim.dk/"                     
[13] "https://www.marineregions.org/"                 "https://CRAN.R-project.org/"                   
[15] "https://miljoegis3.mim.dk/"                     "https://landbrugsgeodata.fvm.dk/"  

【讨论】:

  • 掌握如果 sapply(strsplit(x,"\w+/"), [, 1) ,x 是向量,我几乎得到答案,但我丢失了匹配的正则表达式,例如.dk.net。如果我使用来自 tidyr 的 separate 和分隔符 sep=\w+/,这也是一样的。那么我们可以用分隔符分隔字符串但保留分隔符吗??非常感谢。
  • @TarJae 也许你想要一个正则表达式环顾四周,即sapply(strsplit(URLS, "(?&lt;=\w/).", perl = TRUE), [, 1)
  • 你真的不靠谱!!!
【解决方案2】:

另一个答案提供了更好的 模式,但我会匹配https://同样,而不是简单地从字符串的开头获取所有内容,而不是计算斜杠(参见第 10 个 URL)。我在这里提供了一个替代方案,只是为了好玩。

my_ptrn <- paste(paste0("https://(.*)", 
                        c(".dk", ".net", ".com", ".org")),
                 collapse = "|")

stringr::str_extract(URLS, my_ptrn)
#>  [1] "https://arealdata-api.miljoeportal.dk"        
#>  [2] "https://download.kortforsyningen.dk"          
#>  [3] "https://b0902-prod-dist-app.azurewebsites.net"
#>  [4] "https://sit-ftp.statens-it.dk"                
#>  [5] "https://arealdata.miljoeportal.dk"            
#>  [6] "https://miljoegis3.mim.dk"                    
#>  [7] "https://envs.au.dk"                           
#>  [8] "https://arealdata-api.miljoeportal.dk"        
#>  [9] "https://wfs2-miljoegis.mim.dk"                
#> [10] "https://datasets.catalogue.data.gov.dk"       
#> [11] "https://ens.dk"                               
#> [12] "https://miljoegis.mim.dk"                     
#> [13] "https://www.marineregions.org"                
#> [14] "https://CRAN.R-project.org"                   
#> [15] "https://miljoegis3.mim.dk"                    
#> [16] "https://landbrugsgeodata.fvm.dk"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多