REGEX Сохраняйте шаблон путем подстановки пустого пространства вокруг него - PullRequest
0 голосов
/ 31 января 2019

Мне нужна помощь по конкретному запросу.
Я хочу сохранить шаблон, заменив остальное пустым пространством.

Кто-то может спросить, почему бы не сохранить шаблон как таковой?
Это потому, что этот код является частью более широкой схемы очистки данных, где я уже использую замену шаблона.

Пример:

model = replace(model, "Jetta A\\d", "Jetta")  

очистит все А4 Jetta и А6 только до Jetta.

А теперь я хочу довести "(new line)", который руководство добавляет в model, до version.
Итак, я делаю:

version = replace( paste(version, model, sep = "#"), 
    "#[^(\(new line\))]", "")

То естьчто-нибудь после разделителя #, за которым не следует мой шаблон (я оставил его с одной обратной косой чертой для удобства чтения), и заменил его на ''.

Это почти работает, но захватывает дополнительные символы, которые он не должен.

Кроме того, я добавил разделитель, чтобы различать две части, но если есть способ обойти это, он мне не нужен.

Кто-нибудь знает, что происходит?

Спасибо.

Кроме того, я использую R с stringr, если это актуально.

1 Ответ

0 голосов
/ 01 февраля 2019

Это может быть сделано с положительным прогнозом и ленивым точечным узором:

"#.*?(?=\\(new line\\)|$)"

Соответствует:

  • # - # char
  • .*? - любые 0+ символов, кроме символов разрыва строки, как можно меньше (например, *? не является жадным квантификатором)
  • (?=\\(new line\\)|$) - положительный прогноз, требующий (new line)подстрока или конец строки непосредственно справа от текущего местоположения.

Если совпадения охватывают несколько строк, используйте модификатор (?s):

"(?s)#.*?(?=\\(new line\\)|$)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...