Обнаруживать символы не 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-символы в строке или в текстовом файле.