基于一个或多个指定字符的出现,如何拆分字符串?

3

给定字符串:

string <- "AATTGGCGCTAG---AT-TTACG----"

我该如何根据一个或多个“-”的出现将字符串分割成多个部分呢?例如:
string1 <- "AATTGGCGCTAG"
string2 <- "---"
string3 <- "AT"
string4 <- "-"
string5 <- "TTACG"
string6 <- "----"

我尝试过:

strsplit(string, "[-]+")

然而,这并没有返回“-”字符串。

1
抱歉,我以为我已经勾选了这个。感谢您的帮助! - Powege
2个回答

4

您可以将它们与其他内容相匹配

[^-]+|-+

请参见正则表达式演示。它匹配:

  • [^-]+ - 除-外的1个或多个字符
  • | - 或
  • -+ - 1个或多个-字符。

在R中:

x <- "AATTGGCGCTAG---AT-TTACG----"
regmatches(x, gregexpr("[^-]+|-+", x))

或者

library(stringr)
x <- "AATTGGCGCTAG---AT-TTACG----"
str_extract_all(x, "[^-]+|-+")

输出

## => [[1]]
##    [1] "AATTGGCGCTAG" "---"   "AT"  "-"   "TTACG"   "----"

0

这里是针对您当前使用的 strsplit 的直接修复:

string <- "AATTGGCGCTAG---AT-TTACG----"
strsplit(string, "(?<=[^-])(?=[-])|(?<=[-])(?=[^-])", perl=TRUE)[[1]]

[1] "AATTGGCGCTAG" "---"          "AT"           "-"            "TTACG"
[6] "----"

正则表达式模式背后的思想是在以下两个条件之一成立时进行拆分:
  • 紧接在前面的字符不是破折号,而后面是破折号;或者
  • 紧接在前面的字符是破折号,而后面不是破折号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接