R获得字符串匹配
我向上帝发誓,在过去的60分钟里,我用谷歌搜索引擎“r get match”ecetera搜索了整个互联网。我不想为这个简单的任务安装任何库。我有一个字符串R获得字符串匹配,r,get,match,R,Get,Match,我向上帝发誓,在过去的60分钟里,我用谷歌搜索引擎“r get match”ecetera搜索了整个互联网。我不想为这个简单的任务安装任何库。我有一个字符串“something1\u something2”,我想得到something1 a<-"hi_there" 我想得到“hi”,但我似乎连“hi”都得不到。我已经尝试了一千种方法,我该怎么做呢?这可能有点棘手。您需要在与整个字符串匹配的模式中创建一个捕获组,以将整个字符串替换为捕获组中的内容: sub("(hi)_.+","\\1",
“something1\u something2”
,我想得到something1
a<-"hi_there"
我想得到
“hi”
,但我似乎连“hi”
都得不到。我已经尝试了一千种方法,我该怎么做呢?这可能有点棘手。您需要在与整个字符串匹配的模式中创建一个捕获组,以将整个字符串替换为捕获组中的内容:
sub("(hi)_.+","\\1",a)
[1] "hi"
这可能有点棘手。您需要在与整个字符串匹配的模式中创建一个捕获组,以将整个字符串替换为捕获组中的内容:
sub("(hi)_.+","\\1",a)
[1] "hi"
请尝试strsplit将字符串拆分为块:
x = c("hi_there", "this#is#sparta")
chunks = strsplit(x, c("_", "#"))
# first word
print(chunks[[1]])
[1] "hi" "there"
# second word
print(chunks[[2]])
[1] "this" "is" "sparta"
请尝试strsplit将字符串拆分为块:
x = c("hi_there", "this#is#sparta")
chunks = strsplit(x, c("_", "#"))
# first word
print(chunks[[1]])
[1] "hi" "there"
# second word
print(chunks[[2]])
[1] "this" "is" "sparta"
regexec
/regmaches
也能做到这一点,尽管对于这个特定问题,strsplit
方法更简单
a <- c("hi_there", "something_somthing", "boo_ya_yo")
sapply(regmatches(a, regexec("^([^_]*)", a)), `[[`, 2)
# [1] "hi" "something" "boo"
aregexec
/regmaches
也能做到这一点,尽管对于这个特定问题,strsplit
方法更简单
a <- c("hi_there", "something_somthing", "boo_ya_yo")
sapply(regmatches(a, regexec("^([^_]*)", a)), `[[`, 2)
# [1] "hi" "something" "boo"
a我猜您通常是在查找从character vector元素开始到第一个下划线的子字符串。您只会找到一个匹配项(元素的开头只有一个子字符串),因此sub
是您要去的地方,或者匹配所需的字符串(查看字符串的开头^
捕获零个或多个非下划线([^!]*)
,后跟下划线,可能还有其他字符。
。*)
或者将内容放在第一个下划线之后(一个下划线\uu
后跟零个或多个其他字符*
)
通过一些测试
x = c("a_b", "a_", "_b", "a", "a_b_c", "", NA)
sub(re1, "\\1", x)
## [1] "a" "a" "" "a" "a" "" NA
sub(re2, "", x)
## [1] "a" "a" "" "a" "a" "" NA
strsplit
解决方案在某些方面失败。我猜您通常是在寻找从character vector元素开始到第一个下划线的子字符串。您只会找到一个匹配项(元素的开头只有一个子字符串),因此sub
是您要去的地方,或者匹配所需的字符串(查看字符串的开头^
捕获零个或多个非下划线([^!]*)
,后跟下划线,可能还有其他字符。。*)
或者将内容放在第一个下划线之后(一个下划线\uu
后跟零个或多个其他字符*
)
通过一些测试
x = c("a_b", "a_", "_b", "a", "a_b_c", "", NA)
sub(re1, "\\1", x)
## [1] "a" "a" "" "a" "a" "" NA
sub(re2, "", x)
## [1] "a" "a" "" "a" "a" "" NA
strsplit
解决方案在其中一些问题上失败。strsplit(x,“”)[[1]gsub((.*)\u(.*),“\\ 1”,a)
很可能是您所想的,但是如果您描述条件而不是告诉我们搜索的历史,它会有所帮助:-)sub删除匹配的内容!!实际上,您希望sub(“\\1”,a)
获得“hi”
。您所描述的是使用regmatches
提取字符串的匹配部分,其工作原理如下:regmatches(a,regexpr(“hi”,a))
。请看,同样的事情。strsplit(x,“”)[[1]gsub((.*)\u(.*),“\\ 1”,a)
很可能是您所想的,但是如果您描述条件而不是告诉我们搜索的历史记录,它会有所帮助:-)sub
删除匹配的内容!!实际上,您希望sub(“\\1”,a)
获得“hi”
。您所描述的是使用regmatches
提取字符串的匹配部分,其工作原理如下:regmatches(a,regexpr(“hi”,a))
。看,同样的事情。