我需要一个regex专家来解决这个问题。它与我丢失的一个如此问题有关,其中的数据如下:
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"但这不是通缉的结果!
你知道第二个正则表达式出了什么问题吗?
发布于 2015-07-21 14:26:40
以下内容非常接近你想出的结果,将起作用:
gsub('[^/]+(?=[A-Z]/.+)','',x, perl=T)
(您的行没有工作,因为您要求“任何字符”,其中包括"\")
发布于 2015-07-21 14:20:15
作为一种可能的解决方案,您可以使用以下替换:
gsub('.*?([^/](?:/[^/])+)$','\\1',x, perl=T)或者(如果必须有一封信):
gsub('.*?([A-Z](?:/[A-Z])+)$','\\1',x, perl=T)请参阅IDEONE演示
.*? -从一开始就匹配尽可能少的字符,而不是换行符([^/](?:/[^/])+) -捕获组匹配:[^/] - /以外的字符(或者-如果[A-Z] -任何英文大写字符)(?:/[^/])+ -1或更多的/序列和/以外的字符(如果使用[A-Z],则为大写字母)。
$ -字符串的结尾发布于 2015-07-21 14:25:53
试试这个:
gsub('\\w\\/.*(\\/.*)?','',x)Regex展望未来:
gsub('\\w(?=\\/).*','',x,perl=T)
gsub('.*\\d(?=\\w\\/)','',x, perl=T) #For O2https://stackoverflow.com/questions/31541480
复制相似问题