gsub从字符串regex可选逗号中提取特定数字

时间:2017-10-26 18:50:15

标签: r regex gsub

我需要从矢量中的字符串中提取特定数字,如下所示:

V1    V2    info
XX    YY    AB=414312;CD=0.5555;EF=1234;GH=2346;IJ=551;AA_CD=0.4633
VV    ZZ    AB=1093;CD=0.4444,0.78463;EF=1654;GH=6546;IJ=1241;AA_CD=0.4366

我只想从" CD = XXX"中提取数字。 (注意每行还有一个" AA_CD = XXXX")

我目前有:

df$info <- as.numeric(gsub("^.*;CD=[0-9, ],?|;.*$", "", df$info))

在&#34; CD =&#34;之后抓取数字在用逗号分隔的数字不超过一个的情况下。

我需要这个包含多个以逗号分隔的数字的行。 我的正则表达式仅适用于该点中只有一个数字的行,如下所示:

0.5555
0.4444,0.78463
0.0123
0.34,0.54,0.765

我知道这可能是我犯的一个愚蠢的错误...提前谢谢!!!

1 个答案:

答案 0 :(得分:1)

这是一种方法

lapply(strsplit(gsub("^.*;CD=(0\\.[0-9]),?|;.*$", "\\1", vec), ","), as.numeric)

gsub("^.*;CD=(0\\.[0-9]),?|;.*$", "\\1", vec) #extracts the numbers
#output
1] "0.5555"         "0.4444,0.78463"

然后将这些内容拆分为,strsplit生成一个列表

然后as.numeric将列表元素转换为lapply

如果不需要跟踪哪个向量成员具有哪个数字:

as.numeric(unlist(strsplit(gsub("^.*;CD=(0\\.[0-9]),?|;.*$", "\\1", vec), ",")))