Заменить все символы, кроме выражения, используя только gsub - PullRequest
0 голосов
/ 29 мая 2018

Данные строки:

smple_paths <- c("/path/path/path/abc22/path/path",
                 "/apath/apath/paath/abc11/something/path")

Я хотел бы заменить все символы, кроме фразы abc\\d{2}

Попытка

gsub(
    pattern = "(?!abc\\d{2})",
    replacement = "",
    x = smple_paths,
    perl = TRUE
)

# [1] "/path/path/path/abc22/path/path"        
# [2] "/apath/apath/paath/abc11/something/path"

Желаемые результаты

abc22
abc11

Примечания

  • Я не ищу решение на основе stringr::str_extract или любое другое решение, не основанное на gsub

1 Ответ

0 голосов
/ 29 мая 2018

Если вас не волнует контекст abc\d{2}, вы можете использовать

sub(".*(abc\\d{2}).*", "\\1", smple_paths)

См. это регулярное выражение и это демо R .

Если вам небезразличен контекст, вы можете сопоставить и захватить abc + 2 цифры после / и до / или до конца строки, сопоставляя любой текст до и после этого шаблона, используя

 sub("^.*/(abc\\d{2})(?:/.*)?$", "\\1", smple_paths)

См. Демо R и демо regex .

Подробности

  • ^ - начало строки (здесь не обязательно, но сохранено для ясности)
  • .* - любые 0+ символов, как можно больше
  • / - / символ
  • (abc\\d{2}) - группа 1: abc и 2 цифры
  • (?:/.*)? - необязательное (1 или 0) вхождение / с последующими 0+ символами как можно больше
  • $ - конец строки.

Заполнитель \1 в шаблоне замены вставляет захваченный текст обратно врезультат.

...