的假设我有以下的字符串(文件名):提取物2份串
a <- "X/ZHEB100/TKN_VAR29380_timely_p1.txt"
其中由几部分组成(这里给出P1)
或另一个
b <- "X/ZHEB100/ZHN_VAR29380_timely.txt"
它只包含一个部分(所以不需要标记任何p)
如何提取标识符,这是VARXXXXX
之前的三个字母(如果一个是TKN
,如果两个是ZHN
)加上零件标识符(如果可用)?
所以结果应该是:
case1 : TKN_p1
case2 : ZHN
我知道如何提取的第一标识,但我无法处理在同一时间的第二个。
我迄今为止的做法:
sub(".*(.{3})_VAR29380_timely(.{3}).*","\\1\\2", a)
sub(".*(.{3})_VAR29380_timely(.{3}).*","\\1\\2", b)
但这种不正确的增加.tx
在第二种情况下。
尝试'子(“^ * /([AZ] {3})_ [^/_] + _ [^/_] +(_ [^ _。/] +)?\\。[^。] * $“,”\\ 1 \\ 2“,a)' –
也许先测试一个标识符,例如'stringr :: str_match(string,'_p。\\。txt')'然后使用两个更简单的正则表达式? –
@WiktorStribiżew不适用于第二种情况。 – user3032689