正则表达式。*匹配不同的字符

时间:2016-03-09 04:08:01

标签: regex r

我无法理解以下结果

>f <- "anno_26//anno_-1_5_252138_4817.rds"
>sub("anno_26//anno_.*?_(.*?)_.*?_.*", "", f)
[1] "4817.rd"
>sub("anno_26//anno_.*?_.*?_(.*?)_.*", "", f)
[1] ""

为什么在前正则表达式中,“。*”与任何内容都不匹配,而在后者中它对应于4817.rd?

1 个答案:

答案 0 :(得分:0)

不确定要实现的目标,但使用反向引用可能会帮助您取得进展:

f <- "anno_26//anno_-1_5_252138_4817.rds"

sub("(anno_26\\/\\/anno_.*?_)(.*?)(_.*?_.*)", "\\1\\3", f, perl=TRUE)
[1] "anno_26//anno_-1__252138_4817.rds"

sub("(anno_26\\/\\/anno_.*?_.*?_)(.*?)(_.*)", "\\1\\3", f, perl=TRUE)
[1] "anno_26//anno_-1_5__4817.rds"