Замена строковой переменной на пунктуацию в R без удаления другой строки - PullRequest
0 голосов
/ 08 февраля 2020

В R возникли проблемы при замене подстроки с пунктуацией. Ie в строке "r.Export" я пытаюсь заменить "r." с «Отчетом». Я использовал gsub, и ниже приведен мой код:

string <- "r.Export"
short <- "r."
replacement <- "Report."

gsub(short,replacement,string)

Требуемый вывод: «Report.Export», однако gsub, похоже, заменяет второй r так, что вывод:

Report.ExpoReport.

Использование sub () вместо этого также не является решением, потому что я делаю несколько gsub, где иногда необходимо заменить строку:

short <- "o."

Итак, тогда все равно в r.Export заменяются и это становится полным беспорядком.

Ответы [ 4 ]

3 голосов
/ 08 февраля 2020
string <- "r.Export"
short <- "r\\."
replacement <- "Report."

gsub(short,replacement,string)

Возвращает:

[1] "Report.Export"

Или, используя fixed=TRUE:

string <- "r.Export"
short <- "r."
replacement <- "Report."

gsub(short,replacement,string, fixed=TRUE)

Возвращает:

[1] "Report.Export"

Объяснение: Без fixed=TRUE аргумент gsub ожидает регулярное выражение в качестве первого аргумента. И с регулярными выражениями . является заполнителем для «любого символа». Если вам нужен литерал . (точка), вы должны использовать либо \\. (т. Е. Экранирование точки), либо вышеупомянутый аргумент fixed=TRUE

1 голос
/ 08 февраля 2020

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

string <- "r.Export"
replacement <- "Report."
output <- gsub("\\br\\.(?=\\w)", replacement, string, perl=TRUE)
output

[1] "Report.Export"

Этот подход гарантирует, что мы сопоставим r. только тогда, когда r предшествует пробел или начало строки, а также, когда то, что следует за точкой, является другим словом. Рассмотрим предложение The project r.Export needed a programmer. Мы не хотим заменять окончательный r. в этом случае.

1 голос
/ 08 февраля 2020

Поскольку в вашем шаблоне есть символы (.), которые имеют специальное значение в регулярном выражении, используйте fixed = TRUE, который соответствует строке как есть.

gsub(short,replacement,string, fixed = TRUE)
#[1] "Report.Export"
0 голосов
/ 08 февраля 2020

Мы можем использовать sub

sub(short,replacement,string, fixed = TRUE)
#[1] "Report.Export"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...