我无法拆分混合字符串。考虑了两种情况:
将"A1BB2CCC3"
拆分为"A1" "BB2" "CCC3"
。
将相同内容分割为"A" "1" "BB" "2" "CCC" "3"
。
我尝试使用strsplit()
,但是我对 regex 语法不熟悉。感谢您的帮助。
答案 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
包,则regmatches
和gregexpr
可以做到:
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+"))))