Как заменить \r\n символов в текстовой строке конкретно в R

Для жизни я не могу удалить некоторые escape-символы из текстовой строки (до дальнейшей обработки). Я пробовал stringi, gsub, но я просто не могу получить правильный синтаксис.

Вот моя текстовая строка

txt <- "c(\"\\r\\n    Stuff from a webpage: That I scraped using webcrawler\\r\\n\", \"\\r\\n        \", \"\\r\\n        \", \"\\r\\n        \", \"\\r\\n\\r\\n        \", \"\\r\\n\\r\\n        \", \"\\r\\n        \\r\\n    \", \"\\r\\n    \")"

Я хотел бы вычеркнуть "\\r\\n" из этой строки.

я пробовал

gsub("[\\\r\\\n]", "", txt)  (leaves me with "rn")
gsub("[\\r\\n]", "", txt)    (leaves me without ANY r or n in the text)
gsub("[\r\n]", "", txt)      (strips nothing)

Как я могу удалить этих персонажей? Имейте в виду, что для этого нужно будет работать над другими записями, которые могут содержать обычные слова, оканчивающиеся на "rn", или где-то посередине "rn"!

Спасибо!

2 ответа

Решение

Не очень красиво, но это работает:

library(stringr)
str_remove_all(txt, "(?<=\\\\n)\\s+|\\s+(?=\\\")|\\\"|(?<=\\\"),|\\\\r(?=\\\\n)|(?<=\\\\r)\\\\n")
[1] "c(Stuff from a webpage: That I scraped using webcrawler)"

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

Я также избавился от всех лишних "\", "," и пробелов.

Если вы просто хотите сопоставить результат, который вы опубликовали выше:

str_remove_all(txt, "\\\\r(?=\\\\n)|(?<=\\\\r)\\\\n")

Это читает удалить любой экземпляр \\r с последующим \\n или любой \\n предшествует \\r

Рискнув ответить на мой собственный вопрос слишком быстро, я нашел обходной путь, который просто включает переключение "\" для редкого заполнителя, "__", а затем замену этого:

gsub('__r__n', '', gsub('[\\\\]', '__', txt))

... но было бы полезно поделиться лучшим решением "одного удара".

Другие вопросы по тегам