【发布时间】:2015-10-11 01:12:36
【问题描述】:
我需要一位regex 专家来解决这个问题。它与我丢失的一个 SO 问题相关联,其中数据如下:
x = c("IID:WE:G12D/V/A", "GH:SQ:p.R172W/G", "HH:WG:p.S122F/H")
我需要拆分x 的每个元素以隔离可以由letter - slash - letter - .... slash - letter 构成的末端部分。
我想要的是获得这两个向量作为输出:
o1 = c("IID:WE:G12", "GH:SQ:p.R172", "HH:WG:p.S122")
o2 = c("D/V/A", "W/G", "F/H")
我有o1 的这个解决方案:
gsub('[A-Z]/.+','',x)
#[1] "IID:WE:G12" "GH:SQ:p.R172" "HH:WG:p.S122"
很好。对于o2,我尝试使用断言,尤其是前瞻断言:
gsub('.+(?=[A-Z]/.+)','',x, perl=T)
#[1] "V/A" "W/G" "F/H"
但这不是想要的结果!
知道第二个正则表达式出了什么问题吗?
【问题讨论】:
-
链接到这个:stackoverflow.com/questions/31532852/string-split-and-expand-the-vector-at-the-delimiter-r? ;-)
-
我认为这会有所帮助:
gsub('.*?([^/](?:/[^/])+)$','\\1',x, perl=T)?或gsub('.*?([A-Z](?:/[A-Z])+)$','\\1',x, perl=T). -
@CathG,是的,我发现解决方案很长,最重要的是我对正则表达式的快速限制:)
-
所以你发布一个问题是为了回答另一个问题......有趣...... ;-)
-
这行得通:
gsub('[^/]+(?=[A-Z]/.+)','',x, perl=T)...(所以几乎是你所拥有的,只是它不起作用,因为 "\" 包含在 "." 中)