如何以类似grep的方式检测向量f字符串中的非ascii字符。例如,我想返回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))
答案 0 :(得分:15)
另一种可能的方法是尝试将您的字符串转换为ASCII并尝试检测所有生成的不可打印的控制字符,这些字符无法转换
grepl("[[:cntrl:]]", stringi::stri_enc_toascii(x))
## [1] TRUE FALSE TRUE FALSE
虽然stringi
似乎也有这种类型的内置函数
stringi::stri_enc_mark(x)
# [1] "latin1" "ASCII" "latin1" "ASCII"
答案 1 :(得分:10)
稍后使用纯基础正则表达式来解决这个问题:
grepl("[^ -~]", x)
## [1] TRUE FALSE TRUE FALSE
答案 2 :(得分:9)
为什么不从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
答案 3 :(得分:1)
我想有点晚了,但对以后的读者可能有用。
您可以找到以下功能:
showNonASCII(<character_vector>)
showNonASCIIfile(<file>)
tools
R程序包中(请参阅https://stat.ethz.ch/R-manual/R-devel/library/tools/html/showNonASCII.html)。它完全符合此处的要求:在字符串或文本文件中显示非ASCII字符。