分割混合字符串

时间:2019-10-30 10:46:43

标签: r regex

我无法拆分混合字符串。考虑了两种情况:

  1. "A1BB2CCC3"拆分为"A1" "BB2" "CCC3"

  2. 将相同内容分割为"A" "1" "BB" "2" "CCC" "3"

我尝试使用strsplit(),但是我对 regex 语法不熟悉。感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

我们可以使用split两次,然后粘贴/串联这两种方法来获取您的情况,即

i1 <- strsplit(x, '[0-9]+')[[1]]
i2 <- strsplit(x, '[A-Z]+')[[1]]

case1 <- paste0(i1, i2[i2 != ''])
case1
#[1] "A1"   "BB2"  "CCC3"

case2 <- c(i1, i2[i2 != ''])
case2
#[1] "A"   "BB"  "CCC" "1"   "2"   "3"  

如果case2中的顺序很重要,那么我们可以使用Map,即

unlist(Map(c, i1, i2[i2 != '']))
# A1    A2   BB1   BB2  CCC1  CCC2 
#"A"   "1"  "BB"   "2" "CCC"   "3" 

答案 1 :(得分:1)

我宁愿使用MySQL Shell包中的mysql -u abcd -p password_here --local-infile=1 。第一个可以完成:

str_extract_all

该模式读取任意数量的大写字母stringr,然后读取一个数字str_extract_all("A1BB2CCC3","[A-Z]+[0-9]{1}") [[1]] [1] "A1" "BB2" "CCC3" 。 第二个:

[A-Z]+

该模式是任何大写字母或数字。

答案 2 :(得分:1)

如果仅使用base包,则regmatchesgregexpr可以做到:

s <- "A1BB2CCC3"
r1 <- unlist(regmatches(s,gregexpr("([[:alpha:]]+\\d+)",s)))
r2 <- unlist(regmatches(s,gregexpr("([[:alpha:]]+)|(\\d+)",s)))

其中

  • ([[:alpha:]]+\\d+)表示字母的格式,后跟数字作为一个组
  • ([[:alpha:]]+)|(\\d+)分别表示字母或数字的格式

答案 3 :(得分:0)

少说一些话,然后给出其他答案-并在@Sotos Map函数中使用:

tmp <- "A1BB2CCC3"
combined_elements <- paste0(unlist(strsplit(trimws(gsub("\\d+", " ", tmp), "both"), "\\s+")),

              unlist(strsplit(trimws(gsub("[a-zA-Z]+", " ", tmp), "both"), "\\s+")))

unlist(Map(c, unlist(strsplit(trimws(gsub("\\d+", " ", tmp), "both"), "\\s+")), 
           unlist(strsplit(trimws(gsub("[a-zA-Z]+", " ", tmp), "both"), "\\s+"))))