Обнаруживать символы не ascii в строке
Как я могу обнаружить символы non-ascii в векторных строках f в виде grep. Например, ниже я хотел бы вернуться c(1, 3)
или c(TRUE, FALSE, TRUE, FALSE)
:
x <- c("façile test of showNonASCII(): details{",
"This is a good line", "This has an ümlaut in it.", "OK again. }")
Попытка:
y <- tools::showNonASCII(x)
str(y)
p <- capture.output(tools::showNonASCII(x))
Ответы
Ответ 1
другой возможный способ - попытаться преобразовать вашу строку в ASCII и попытаться обнаружить все сгенерированные непечатаемые управляющие символы, которые невозможно преобразовать
grepl("[[:cntrl:]]", stringi::stri_enc_toascii(x))
## [1] TRUE FALSE TRUE FALSE
Хотя кажется, что stringi
имеет встроенную функцию для этого типа вещей
stringi::stri_enc_mark(x)
# [1] "latin1" "ASCII" "latin1" "ASCII"
Ответ 2
Перешел через это позже, используя чистое базовое регулярное выражение и так просто:
grepl("[^ -~]", x)
## [1] TRUE FALSE TRUE FALSE
Подробнее здесь: http://www.catonmat.net/blog/my-favorite-regex/
Ответ 3
Почему вы не извлекаете соответствующий код из showNonASCII
?
x <- c("façile test of showNonASCII(): details{",
"This is a good line", "This has an ümlaut in it.", "OK again. }")
grepNonASCII <- function(x) {
asc <- iconv(x, "latin1", "ASCII")
ind <- is.na(asc) | asc != x
which(ind)
}
grepNonASCII(x)
#[1] 1 3
Ответ 4
Думаю, немного поздно, но это может быть полезно для следующих читателей.
Вы можете найти эти функции:
showNonASCII(<character_vector>)
showNonASCIIfile(<file>)
в пакете tools
R (см. https://stat.ethz.ch/R-manual/R-devel/library/tools/html/showNonASCII.html). Он делает именно то, что спрашивается здесь: показывать не ASCII-символы в строке или в текстовом файле.