Как проверить, есть ли \ в строке? - PullRequest
3 голосов
/ 04 ноября 2019

Я работаю со следующей строкой:

Potent_Abb <- "GR\xdcNE"

Я хочу проверить, содержит ли строка "\" в ней. Таким образом, он выдает логическое значение (True или False) в качестве вывода.

Буду признателен за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Цитата из Обработка строк с помощью R

Не все метасимволы становятся буквальными символами, когда они появляются внутри набора символов. Исключения составляют закрывающая скобка], тире -, символ ^ и обратный слеш \.

Ответ на ваш вопрос «Как проверить обратный слеш (\) в строке? " R для Data Science :

... Если в регулярных выражениях в качестве escape-символа используется \, как вы сопоставляете литерал \? Ну, вам нужно избежать этого, создав регулярное выражение \\. Чтобы создать это регулярное выражение, вам нужно использовать строку, которая также должна экранировать \. Это означает, что для совпадения с литералом \ вам нужно написать \\\\ - вам нужно четыре обратных слеша, чтобы соответствовать одному!

Пример использования вашей строки с использованием stringr:

library(stringr)

Potent_Abb <- "GR\xdcNE"
writeLines(Potent_Abb, con = stdout()) # cat(Potent_Abb)
#GR�NE
# to detect if the string has a backslash
str_detect(Potent_Abb, "\\\\")
# FALSE

#Let's add a backslash literal at the end 
# we need to escape the '\` using a '\` to represent it as a literal, hence `\\`
Potent_Abb <- "GR\xdcNE\\"
writeLines(Potent_Abb, con = stdout()) # cat(Potent_Abb)
#GR�NE\

str_detect(Potent_Abb, "\\\\")
# TRUE

Надеюсь, что это что-то добавит, если не будущие ссылки на себя.

1 голос
/ 04 ноября 2019

Вы можете использовать iconv для замены символов ASCII другим символом, а затем вместо этого сопоставить этот символ:

Potent_Abb <- "GR\xdcNE"

grepl("#", iconv(Potent_Abb, "ASCII", sub = "#"))

# [1] TRUE
...