如何以类似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. }")
Run Code Online (Sandbox Code Playgroud)
尝试:
y <- tools::showNonASCII(x)
str(y)
p <- capture.output(tools::showNonASCII(x))
Run Code Online (Sandbox Code Playgroud)
Dav*_*urg 15
另一种可能的方法是尝试将您的字符串转换为ASCII并尝试检测所有生成的不可打印的控制字符,这些字符无法转换
grepl("[[:cntrl:]]", stringi::stri_enc_toascii(x))
## [1] TRUE FALSE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
虽然它似乎stringi也有这种类型的东西的内置功能
stringi::stri_enc_mark(x)
# [1] "latin1" "ASCII" "latin1" "ASCII"
Run Code Online (Sandbox Code Playgroud)
Tyl*_*ker 12
稍后使用纯基础正则表达式来实现这个简单:
grepl("[^ -~]", x)
## [1] TRUE FALSE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
更多信息:http://www.catonmat.net/blog/my-favorite-regex/
Rol*_*and 10
你为什么不从中提取相关代码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
Run Code Online (Sandbox Code Playgroud)
我想有点晚了,但它可能对下一个读者有用。
您可以找到这些功能:
showNonASCII(<character_vector>)showNonASCIIfile(<file>)在 R 包中tools(请参阅https://stat.ethz.ch/R-manual/R-devel/library/tools/html/showNonASCII.html)。它完全按照此处的要求执行:显示字符串或文本文件中的非 ASCII 字符。
| 归档时间: |
|
| 查看次数: |
3969 次 |
| 最近记录: |