我的向量为
dt <- c("1:7984985:A:G", "1:7984985-7984985:A:G", "1:7984985-7984985:T:G")
我想在 2:
之后提取所有内容.
我想要的结果是A:G , A:G, T:G
对此的解决方案是什么?
我们可以使用sub
匹配一个或多个不是:
([^:]+
( 的字符的两个实例,后跟字符串开头的:
(^
( 并将其替换为空白 (""
(
sub("^([^:]+:){2}", "", dt)
#[1] "A:G" "A:G" "T:G"
也可以用trimws
来完成(如果不是基于位置(
trimws(dt, whitespace = "[-0-9:]")
#[1] "A:G" "A:G" "T:G"
<小时 />或使用stringr
的str_remove
library(stringr)
str_remove(dt, "^([^:]+:){2}")
#[1] "A:G" "A:G" "T:G"
您可以使用sub
,捕获要保留在捕获组中的项目(...)
并在替换参数中引用它们以sub
:
sub("^.:[^:]+:(.:.)", "\1", dt, perl = T)
[1] "A:G" "A:G" "T:G"
或者,您可以使用str_extract
和积极的后视(?<=...)
:
library(stringr)
str_extract(dt, "(?<=:)[A-Z]:[A-Z]")
[1] "A:G" "A:G" "T:G"
或者干脆使用 str_split 返回 2 个值的列表。 'str_split("1:7984985:A:G", "\:",n=3([[1]][3]'