tl;dr: Вам нужно 4 \
s (т. е. \\\\
) в первом аргументе gsub
, чтобы найти один литерал \
в третьем аргументе gsub
. Общий процесс таков:
- gsub получает
\\\\
, передает \\
- регулярное выражение получает
\\
, ищет \
.
Чтобы избежать fixed = TRUE
, что исключает выполнение более сложных поисков, ваш код должен быть:
> gsub( "\\\\", "", "Easy bruising and bleeding.\\")
[1] "Easy bruising and bleeding."
Объяснение. Причина, по которой вам нужно 4 \
, заключается в том, что \
является специальным символом для механизма регулярных выражений, поэтому для того, чтобы механизм регулярных выражений нашел литерал \
, ему необходимо передать \\
; первый \
указывает, что второй \
— это не специальный символ, а \
, который должен соответствовать буквально. Таким образом, регулярное выражение получает \\
и ищет \
в строке.
\
также является специальным символом для R, поэтому для того, чтобы gsub
передал \\
механизму регулярных выражений, gsub
необходимо получить \\\\
. Первый \
указывает, что второй \
является литералом \
, а не специальным символом; третий \
делает то же самое для четвертого \
. Таким образом, gsub получает \\\\
и передает \\
механизму регулярных выражений.
Опять же, общий процесс таков: gsub получает \\\\
, передает \\
; регулярное выражение получает \\
, ищет \
.
Примечание. хотя строка, которую вы нам дали, выводится на экран как "Easy bruising and bleeding.\\"
, на самом деле это строка Easy bruising and bleeding.\
. Первый \
на самом деле просто побег для второго \
. Вы можете проверить это с помощью этого кода:
> cat("Easy bruising and bleeding.\\")
Easy bruising and bleeding.\
Вот почему код, который я предлагаю, имеет 4 \
s, а не 8 \
s.
person
Josh
schedule
11.12.2018