分隔字符串中的大写和小写字符

时间:2019-07-12 21:21:47

标签: r string

我有一些看起来像“ TAGCAGaaccgtaAGTCAAgcgta”的数据,我想通过大写和小写字符之间的分隔来拆分。因此,我的输出将是大写字符串“ TAGCAG”和“ AGTCAA”以及小写字符串“ aaccgta”和“ gcgta”的列表

我尝试过

str <- c("TAGCAGaaccgtaAGTCAAgcgta")
library(stringr)
str_extract(str, '[[:lower:]]+')
str_extract(str, '[[:upper:]]+')

但这只是给我第一个大写或小写的实例。我希望能够在每个列表或数据框中获得所有实例。

2 个答案:

答案 0 :(得分:2)

提取成单独的向量:

类似于@Calum您说过,str_extract_all返回匹配模式的所有实例:

str_extract_all(str, '[[:lower:]]+')
[1]]
[1] "aaccgta" "gcgta"  

str_extract_all(str, '[[:upper:]]+')
[[1]]
[1] "TAGCAG" "AGTCAA"

提取一个向量:

或者您可以使用|正则表达式同时为大写和小写字符串设置子集。

str_extract_all(str, '[[:lower:]]+|[[:upper:]]+')
[[1]]
[1] "TAGCAG"  "aaccgta" "AGTCAA"  "gcgta" 

您可以unlist()输出以返回向量。

答案 1 :(得分:1)

我们可以通过将gregexpr()regmatches()组合在一起来实现:

m <- gregexpr("[[:upper:]]+|[[:lower:]]+", str)

regmatches(str, m)

控制台:

[[1]]
[1] "TAGCAG"  "aaccgta" "AGTCAA"  "gcgta"