将字符拆分为字母和数字

时间:2017-08-21 20:01:26

标签: r regex split

我有一个独特的角色,每个字母都跟一个数字。例如:A1B10C5

我想使用R。

将其拆分为letter <- c(A, B, C)number <- c(1, 10, 5)

4 个答案:

答案 0 :(得分:8)

我们可以使用正则表达式的外观来区分字母和数字

v1 <- strsplit(str1, "(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", perl = TRUE)[[1]]
v1[c(TRUE, FALSE)]
#[1] "A" "B" "C"

as.numeric(v1[c(FALSE, TRUE)])
#[1]  1 10  5

数据

str1 <- "A1B10C5"

答案 1 :(得分:6)

str_extract_all是另一种方法:

library(stringr)

> str <- "A1B10C5"
> str
[1] "A1B10C5"

> str_extract_all(str, "[0-9]+")
[[1]]
[1] "1"  "10" "5" 

> str_extract_all(str, "[aA-zZ]+")
[[1]]
[1] "A" "B" "C"

答案 2 :(得分:2)

您还可以将基础R regmatchesgregexpr

一起使用
regmatches(this, gregexpr("[0-9]+",  "A1B10C5"))
[[1]]
[1] "1"  "10" "5" 

regmatches(this, gregexpr("[A-Z]+",  "A1B10C5"))
[[1]]
[1] "A" "B" "C"

这些返回列表包含单个元素,一个字符向量。正如akrun所做的那样,您可以使用[[1]]提取列表项,也可以将数字向量转换为数字,如下所示:

as.numeric(regmatches(this, gregexpr("[0-9]+", this))[[1]])

答案 3 :(得分:1)

要同时提取字母和数字,您可以使用str_match_all在两个单独的列中输入字母和数字:

library(stringr)
str_match_all("A1B10C5", "([a-zA-Z]+)([0-9]+)")[[1]][,-1]

#     [,1] [,2]
#[1,] "A"  "1" 
#[2,] "B"  "10"
#[3,] "C"  "5"