为什么我不能在具有不同文本长度的模式之间提取文本

时间:2016-08-14 18:59:33

标签: regex r

我在数据框中有一个列,其中包含需要拆分为列的字符。当列中的字符串长度为12时,我的代码似乎会中断,但当字符串的长度为11时,它的工作正常。

S99.ABCD{T}
S99.ABCD{V}
S99.ABCD{W}
S99.ABCD{Y}
Q100.ABCD{A}
Q100.ABCD{C}
Q100.ABCD{D}
Q100.ABCD{E}

理想格式的一个例子在左边,我得到的是在右边:

ID    WILD RES MUT | ID    WILD RES MUT
ABCD  S    99  T   | ABCD  S    99  T
...                | ...
ABCD  Q    100 A   | .ABC  Q    100 { 
...                | ...

我目前的解决方案如下:

    data <- data.frame(ID = substr(mdata$substitution,
                                   gregexpr(pattern = "\\.",
                                   mdata$substitution)[[1]] + 1,
                                   gregexpr(pattern = "\\{",
                                   mdata$substitution)[[1]] - 1),
                       WILD = substr(mdata$substitution, 0, 1),
                       RES = gsub("[^0-9]","", mdata$substitution),
                       MUT = substr(mdata$substitution,
                                    gregexpr(pattern = "\\{",
                                    mdata$substitution)[[1]] + 1,                                    
                                    gregexpr(pattern = "\\}",
                                    mdata$substitution)[[1]] - 1))

我不确定为什么我的代码不起作用,我想使用gregexpr我能找到字符串中的模式位置,找出我要提取的字符的位置,但它不起作用当字符串的长度发生变化时。

0 个答案:

没有答案