如何编写正则表达式从r中的字符串中提取特定元素

时间:2016-06-03 14:12:53

标签: r

我有一个字符串列表如下:

df = read.table(text="AC1=60;AD=393,115;AF1=0.318816;BQB=0.508823;DP=1016;DP4=393
AC1=190;AD=2,747;AF1=1;BQB=0.0722892;DP=749;DP4=2,0,747,0;FQ=-43.6844
AC1=150;AD=1,5;AF1=0.787353;DP=6;DP4=1,0,5,0;VDB=0.00215942
AC1=47;AD=660,182;AF1=0.24862;BQB=0.680047;DP=1684;DP4=660,0,182,0
AC1=47;AD=659,183;AF1=0.248425;DP=842;DP4=0,659,0,183;FQ=999
AC1=78;AD=23,17;AF1=0.408247;BQB=1;DP=40;DP4=23,0,17,0", header=FALSE, stringsAsFactors=F)

每个元素由";"分隔。我想只提取出来" DP = [0-9]"部分。结果预计为:

DP=1016
DP=749
DP=6
DP=1684
DP=842
DP=40 

我感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

在基地:

$request

当正则表达式上的常驻天才建议使用包进行文本提取时,我感到很惊讶。在提取特定字符串时,gsub(".*((?<=;)DP=[^;]+(?=;)).*", "\\1", df$V1, perl=TRUE) #[1] "DP=1016" "DP=749" "DP=6" "DP=842" "DP=1684" "DP=40" sub会变得不守规矩:

gsub

答案 1 :(得分:1)

这是一个可行的正则表达式

gsub(".*;(DP=[0-9.]+);.*$", "\\1", df$V1)

如果情况是“DP =”子字符串包含用逗号分隔的多个条目,在示例数据中某些情况下像“DP4 =”这样的子字符串,则在下面的注释中注释为@ pierre-lafortune,以及在他的回答中,你可能会更好地使用[^;]角色类:

gsub(".*;(DP=[^;]+);.*$", "\\1", df$V1)

当然,您只需将逗号添加到角色类

即可
gsub(".*;(DP=[0-9.,]+);.*$", "\\1", df$V1)

但也可能还有其他字符要保留。所以[^;]将是最具包容性的方法。