tl;dr: Имате нужда от 4 \
s (т.е. \\\\
) в първия аргумент на gsub
, за да намерите един литерал \
в третия аргумент на gsub
. Цялостният процес е:
- gsub получава
\\\\
, предава \\
- regex получава
\\
, търси \
.
За да избегнете fixed = TRUE
, което изключва извършването на по-сложни търсения, вашият код трябва да бъде:
> gsub( "\\\\", "", "Easy bruising and bleeding.\\")
[1] "Easy bruising and bleeding."
Обяснение: Причината, поради която се нуждаете от 4 \
е, че \
е специален знак за механизма за регулярни изрази, така че за да може механизмът за регулярен израз да намери литерал \
, той трябва да бъде предаден \\
; първият \
показва, че вторият \
не е специален знак, а \
, който трябва да бъде съпоставен буквално. Така регулярният израз получава \\
и търси \
в низа.
\
също е специален знак за R, така че, за да може gsub
да предаде \\
на механизма за регулярни изрази, gsub
трябва да получи \\\\
. Първото \
показва, че второто \
е литерал \
, а не специален знак; третият \
прави същото за четвъртия \
. Така gsub получава \\\\
и предава \\
на механизма за регулярни изрази.
Отново цялостният процес е: gsub получава \\\\
, предава \\
; regex получава \\
, търси \
.
Забележка: докато низът, който ни предоставихте, се отпечатва на екрана като "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