Regex R正则表达式-括号之间的拆分

Regex R正则表达式-括号之间的拆分,regex,r,Regex,R,假设我有一个字符串x,我想像这样拆分它: x <- "(A|C|T)AG(C|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)GCC(C|T)(A|C|G|T)(A|C|G|T)(A|C|G)" # Desired output [1] "(A|C|T)" "A" "G" "(C|T)" "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)" [8] "(A|C|G|T)" "(A|C|G|T)" "G

假设我有一个字符串
x
,我想像这样拆分它:

x <- "(A|C|T)AG(C|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)GCC(C|T)(A|C|G|T)(A|C|G|T)(A|C|G)"

# Desired output
[1]  "(A|C|T)"  "A"  "G"  "(C|T)"  "(A|C|G|T)"  "(A|C|G|T)"  "(A|C|G|T)"  
[8]  "(A|C|G|T)"  "(A|C|G|T)"  "G"  "C"  "C"  "(C|T)"  "(A|C|G|T)"  
[15] "(A|C|G|T)"  "(A|C|G)"  

x像这样的东西应该可以工作:

> library(stringi)

> unlist(stri_extract_all_regex(x, "\\([ACGT\\|]*\\)|[ACGT]"))
 [1] "(A|C|T)"   "A"         "G"         "(C|T)"     "(A|C|G|T)" "(A|C|G|T)"
 [7] "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)" "G"         "C"         "C"        
[13] "(C|T)"     "(A|C|G|T)" "(A|C|G|T)" "(A|C|G)"  

\\([ACGT\\\\\\]*\\)
将匹配括号中的所有内容,并将
[ACGT]
剩余的基数进行匹配。

要拆分单个字母,只需运行
strsplit(x,”)
。您所要做的只是确保不要将其应用于“完成”字符串(即带括号的字符串)


看起来您希望在每个
后拆分字符串,并在每个字母后拆分后面跟有另一个字母或
)的字符串。如果这是您想要的行为,您可以使用以下方法:

pat <- "(?<=\\))|(?<=[[:alpha:]])(?=[[:alpha:]\\(])"
strsplit(x, pat, perl=TRUE)[[1]]
#  [1] "(A|C|T)"   "A"         "G"         "(C|T)"     "(A|C|G|T)" "(A|C|G|T)"
#  [7] "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)" "G"         "C"         "C"        
# [13] "(C|T)"     "(A|C|G|T)" "(A|C|G|T)" "(A|C|G)" 

pat我认为我们发布了相同的方法。:\Rock,paper,剪刀,为谁删除
sample(c(“石头”,“布”,“剪刀”),1)
paper(需要更多字符),所以应该将其作为一项官方政策来实施;)可以从问题的日期中随机生成种子。这个范例可以扩展到包括。
regmatches(x,gregexpr(“\\\([^\\)]+)\\\”[^\\(\\)\\\\\\\\\\\\\\\\\]],x))[[1]]
这确实是一种比绝对尝试使用拆分方式更好的方法。
y = splitme(x)
Indices = !which(grepl(y, "\\("))
y[Indices] = strsplit(y[Indices], "")
unlist(y)
 [1] "(A|C|T)"   "A"         "G"         "(C|T)"     "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)"
 [9] "(A|C|G|T)" "G"         "C"         "C"         "(C|T)"     "(A|C|G|T)" "(A|C|G|T)" "(A|C|G)" 
pat <- "(?<=\\))|(?<=[[:alpha:]])(?=[[:alpha:]\\(])"
strsplit(x, pat, perl=TRUE)[[1]]
#  [1] "(A|C|T)"   "A"         "G"         "(C|T)"     "(A|C|G|T)" "(A|C|G|T)"
#  [7] "(A|C|G|T)" "(A|C|G|T)" "(A|C|G|T)" "G"         "C"         "C"        
# [13] "(C|T)"     "(A|C|G|T)" "(A|C|G|T)" "(A|C|G)"