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

Regex 正则表达式。*匹配不同的字符,regex,r,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] "" >f sub(“anno_26//anno_.*?(.*?.*?.*?,”,f) [1] “4817路” >sub(“anno_26//ann

我很难理解以下结果

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

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

不确定要实现什么,但使用反向引用可能有助于您取得进展:

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"

f不确定您想要实现什么,但使用反向引用可能有助于您取得进展:

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"

f您的正则表达式似乎有效,您可以检查上的正则表达式匹配函数。你为什么要用re.sub?你到底需要得到什么?不欢迎解释模式问题,因此请指定预期输出,以便我们提供相关帮助。您的正则表达式似乎有效,您可以在上检查正则表达式匹配函数。你为什么要用re.sub?你到底需要得到什么?不欢迎解释模式问题,因此请指定预期输出,以便我们提供相关帮助。