2016-03-09 2 views
1

У меня есть проблемы с пониманием следующих результатоврегулярного выражения. * Соответствует разным характерам

>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 ?

+0

Ваше регулярное выражение, кажется, действительно, вы можете проверить функцию определения совпадения регулярных выражений на https://regex101.com/. Почему вы используете re.sub? – clemkoa

+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" 
Смежные вопросы