繁体   English   中英

gsub R提取字符串

[英]gsub R extracting string

我试图用gsub提取两个逗号之间的字符串。 如果我有以下内容

xz<- "1620 Honeylocust Drive, 60210 IL, USA"

我想提取两个逗号( 60120 IL )之间的所有内容,是否可以使用gsub?

我努力了

gsub(".*,","",xz)

结果是美国。 我该怎么做?

我们可以匹配零个或多个字符不是,[^,]* ),后跟一个,接着从开始的零个或更多的空间( ^字符串或) | 一个,随后的零个或多个字符不属于,[^,]* )在端部( $ )串,并用空白替换( ""

gsub("^[^,]*,\\s*|,[^,]*$", "", xz)
#[1] "60210 IL"

或另一个选择是使用sub和捕获作为一个组

sub("^[^,]+,\\s+([^,]+).*", "\\1", xz)
#[1] "60210 IL"

另一个选择是regexpr/regmatches

regmatches(xz, regexpr("(?<=,\\s)[^,]*(?=,)", xz, perl = TRUE))
#[1] "60210 IL"

或使用str_extractstringr

library(stringr)
str_extract(xz, "(?<=,\\s)[^,]*(?=,)")
#[1] "60210 IL"

更新资料

使用新的字符串,

xz1 <- "1620, Honeylocust Drive, 60210 IL, USA"
sub(".*,\\s+(+[0-9]+[^,]+).*", "\\1", xz1)
#[1] "60210 IL"

您也可以使用strsplit和grep进行此操作(为了便于阅读,我在两行中做了此操作):

xz1 <- "1620, Honeylocust Drive, 60210 IL, USA"
a1 <- strsplit(xz1, "[ ]*,[ ]*")[[1]]
grep("^[0-9]+[ ]+[A-Z]+", a1, value=TRUE)
#[1] "60210 IL"

它没有使用gsub,在当前情况下还不是更好,但是也许更容易适应其他情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM