这两行代码有什么错误?获取模式:"http:// blabla .nc"
What is the mistake in this two lines of code? Getting pattern: "http:// blabla .nc"
我有数百个 TXT 文件,其中包含很多东西和一些下载 links。
下载link的模式是这样的:
开始于: http://
和
结束于:.nc
为方便起见,我创建了一个示例文本文件,您可以从此 link 下载:
https://www.dropbox.com/s/5crmleli2ppa1rm/textfile_including_https.txt?dl=1
基于 Whosebug 中的这个主题,我尝试从文本文件中提取所有下载 links:
Extract websites links from a text in R
这是我的代码:
download_links <- readLines(file.choose())
All_my_links <- gsub(download_links, pattern=".*(http://.*nc).*", replace="\1")
但它 returns 所有行,而我只想提取以 .nc
结尾的 http links
结果如下:
head(All_my_links )
tail(All_my_links )
> head(All_my_links )
[1] "#!/bin/bash"
[2] "##############################################################################"
[3] "version=1.3.2"
[4] "CACHE_FILE=.$(basename [=12=]).status"
[5] "openId="
[6] "search_url='https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.HighResMIP.MIROC.NICAM16-9S.highresSST-present.r1i1p1f1.day.pr.gr.v20190830|esgf-data2.diasjp.net'"
> tail(All_my_links )
[1] "MYPROXY_STATUS=$HOME/.MyProxyLogon"
[2] "COOKIE_JAR=$ESG_HOME/cookies"
[3] "MYPROXY_GETCERT=$ESG_HOME/getcert.jar"
[4] "CERT_EXPIRATION_WARNING=$((60 * 60 * 8)) #Eight hour (in seconds)"
[5] ""
[6] "WGET_TRUSTED_CERTIFICATES=$ESG_HOME/certificates"
我的代码有什么错误?
如有任何意见,我们将不胜感激。
gsub()
不是用来提取的,那是你的代码有问题。是用来换的(参见 help("gsub")
)。出于演示目的,我将使用以下数据:
x <- c("abc", "123", "http://site.nc")
(通常,我不会下载此处发布的数据作为 link。大多数其他人也不会。如果您想共享示例数据,最好将其包含在您的质疑 dput()
).
的输出
让我们看看您的 gsub()
方法会发生什么:
gsub(pattern = ".*(http://.*nc).*", replacement = "\1", x = x)
# [1] "abc" "123" "http://site.nc"
看起来很眼熟。这里发生的事情是 gsub()
查看 x
的每个元素,并用 replacement
替换每个出现的 pattern
,在本例中就是它本身。使用这种方法,您将始终得到完全相同的字符向量。
我建议 stringr::str_extract()
:
stringr::str_extract(string = x, pattern = ".*http://.*nc.*")
# [1] NA NA "http://site.nc"
如果你把它包装在 na.omit()
中,它会给你我认为你想要的输出:
na.omit(stringr::str_extract(string = x, pattern = ".*http://.*nc.*"))
# [1] "http://site.nc"
我有数百个 TXT 文件,其中包含很多东西和一些下载 links。
下载link的模式是这样的:
开始于: http://
和
结束于:.nc
为方便起见,我创建了一个示例文本文件,您可以从此 link 下载:
https://www.dropbox.com/s/5crmleli2ppa1rm/textfile_including_https.txt?dl=1
基于 Whosebug 中的这个主题,我尝试从文本文件中提取所有下载 links:
Extract websites links from a text in R
这是我的代码:
download_links <- readLines(file.choose())
All_my_links <- gsub(download_links, pattern=".*(http://.*nc).*", replace="\1")
但它 returns 所有行,而我只想提取以 .nc
结尾的 http links结果如下:
head(All_my_links )
tail(All_my_links )
> head(All_my_links )
[1] "#!/bin/bash"
[2] "##############################################################################"
[3] "version=1.3.2"
[4] "CACHE_FILE=.$(basename [=12=]).status"
[5] "openId="
[6] "search_url='https://esgf-node.llnl.gov/esg-search/wget/?distrib=false&dataset_id=CMIP6.HighResMIP.MIROC.NICAM16-9S.highresSST-present.r1i1p1f1.day.pr.gr.v20190830|esgf-data2.diasjp.net'"
> tail(All_my_links )
[1] "MYPROXY_STATUS=$HOME/.MyProxyLogon"
[2] "COOKIE_JAR=$ESG_HOME/cookies"
[3] "MYPROXY_GETCERT=$ESG_HOME/getcert.jar"
[4] "CERT_EXPIRATION_WARNING=$((60 * 60 * 8)) #Eight hour (in seconds)"
[5] ""
[6] "WGET_TRUSTED_CERTIFICATES=$ESG_HOME/certificates"
我的代码有什么错误?
如有任何意见,我们将不胜感激。
gsub()
不是用来提取的,那是你的代码有问题。是用来换的(参见 help("gsub")
)。出于演示目的,我将使用以下数据:
x <- c("abc", "123", "http://site.nc")
(通常,我不会下载此处发布的数据作为 link。大多数其他人也不会。如果您想共享示例数据,最好将其包含在您的质疑 dput()
).
让我们看看您的 gsub()
方法会发生什么:
gsub(pattern = ".*(http://.*nc).*", replacement = "\1", x = x)
# [1] "abc" "123" "http://site.nc"
看起来很眼熟。这里发生的事情是 gsub()
查看 x
的每个元素,并用 replacement
替换每个出现的 pattern
,在本例中就是它本身。使用这种方法,您将始终得到完全相同的字符向量。
我建议 stringr::str_extract()
:
stringr::str_extract(string = x, pattern = ".*http://.*nc.*")
# [1] NA NA "http://site.nc"
如果你把它包装在 na.omit()
中,它会给你我认为你想要的输出:
na.omit(stringr::str_extract(string = x, pattern = ".*http://.*nc.*"))
# [1] "http://site.nc"