Регулярное выражение только для изменения выражения между sth в R - PullRequest
2 голосов
/ 21 апреля 2020

У меня есть какое-то общее предложение,

\r\n sth ~ sth\r\nsth ~ sth ~ \r\n

Что я хочу сделать, это просто сделать \ r \ n равным ""

Так что результат будет

\r\n sth ~ sthsth ~ sth ~ \r\n

Если я использую регулярное выражение

gsub("\\S\r\n\\S","\\S\\S",string)

Тогда получится результат (пример катится \ r \ nstones)

\r\n sth ~ rollinSStones ~ sth ~ \r\n

Есть ли способ оставить строку:

\r\n sth ~ rollingstones ~ sth ~ \r\n

Мне нужно общее решение, чтобы оставить остальных \ r \ n просто \ r \ n

Спасибо за чтение.

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Вы можете использовать \\b вместо \\S:

gsub("\\b\r\n\\b", "", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

или приблизиться к тому, что вы, возможно, хотели с помощью gsub("\\S\r\n\\S","\\S\\S",string)

gsub("(\\S)\r\n(\\S)", "\\1\\2", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
0 голосов
/ 21 апреля 2020

Вы можете использовать gsub с двойной обратной ссылкой:

gsub("(sth)\r\n(sth)", "\\1\\2", string)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

\\1 захватывает первую группу захвата, которая (sth)

\\2 захватывает вторую группу захвата который (второй) (sth)

0 голосов
/ 21 апреля 2020

Мы можем использовать регулярные выражения с положительным прогнозом:

string <- '\r\n sth ~ sth\r\nsth ~ sth ~ \r\n'

gsub("(?<=\\S)\r\n(?=\\S)","",string, perl = TRUE)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

Мы можем использовать одно и то же регулярное выражение в str_remove из stringr

stringr::str_remove(string, '(?<=\\S)\r\n(?=\\S)')

Это удалит только '/r/n' из строки, за которой не следует пробел, сохраняя непробельный символ в том виде, как он есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...