Проблема в регулярных выражениях - PullRequest
0 голосов
/ 30 октября 2018
e
Material     newvar1 
5000    4.28 > 5 > 5
5001    3 > 2 > 3 > 3

Когда я применяю код ниже

e$newvar2=sapply(str_extract_all(gsub("\\b(\\c+\\.\\c+)(?:\\s+>\\s+\\1\\b)+", "\\1", e$newvar1), "\\d+\\.\\d+"), paste, collapse=" > ")

Я получаю неправильный вывод, как показано ниже

e
Material     newvar1         newvar2
5000        4.28 > 5         4.28
5001        3 > 2 > 3 > 3    3 > 2 > 3

Вместо этого мне нужно, как показано ниже

e
Material     newvar1         newvar2
5000        4.28 > 5        4.28 > 5
5001        3 > 2 > 3 > 3    3 > 2 > 3

1 Ответ

0 голосов
/ 30 октября 2018

Мы можем попробовать использовать str_replace_all из библиотеки stringr. Найдите следующий шаблон, а затем удалите его, заменив пустую строку:

(\\d+(?:\\.\\d+)?) > (?=\\1)

Это соответствует и захватывает число, также совпадающее с исходящим символом >. Если заглянуть в будущее, мы увидим то же число, затем удалим все предыдущее число и разделитель >.

То есть 3 > 3 просто становится 3.

x <- "3 > 2 > 3.28 > 3.28 > 1.5 > 1.5"
str_replace_all(x, "(\\d+(?:\\.\\d+)?) > (?=\\1)", "")

[1] "3 > 2 > 3.28 > 1.5"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...