如何确定字符串是否包含R中的非罗马字符

时间:2016-06-15 18:50:47

标签: regex r string

确定字符串是否包含非罗马/非英语(例如ないでさ)字符的首选方法是什么?

2 个答案:

答案 0 :(得分:5)

您可以使用regex / grep检查可打印ASCII字符范围之外的字符的十六进制值:

x <- 'ないでさ'
grep( "[^\x20-\x7F]",x )
#[1] 1
grep( "[^\x20-\x7F]","Normal text" )
#integer(0)

如果您想要考虑非打印(&#34;控制&#34;)字符&#34;英语&#34;,您可以将hte first参数中的字符类范围扩展为{ {1}}以&#34; \ x01&#34;开头。有关使用字符类主题的更多信息,请参阅grep。有关如何将字符指定为Unicode,十六进制或八进制值的详细信息,请参阅?regex

R.oo包具有可能有用的转换函数:

?Quotes

Henrik Bengtsson认为将这些包含在他的包装中的事实告诉我,在base / default R中没有一个方便的方法来做这件事。他长期使用R / guRu。

看到另一个答案促使这项努力看起来很简单:

library(R.oo)
?intToChar
?charToInt

答案 1 :(得分:5)

您可以确定字符串是否包含yTileiconv

的非拉丁文/非ASCII字符
grep

这意味着第一,第二,第三和第七个索引是非ASCII字符,在我的情况下,1,2,3和7对应于:“ないでさ,satisfação,катынь和für。

你也可以运行

# My example, because you didn't add your data
characters <- c("ないでさ,  satisfação, катынь, Work, Awareness, Potential, für")
# First you convert string to vector of words
characters.unlist <- unlist(strsplit(characters, split=", "))
# Then find indices of words with non-ASCII characters using ICONV
characters.non.ASCII <- grep("characters.unlist", iconv(characters.unlist, "latin1", "ASCII", sub="characters.unlist"))
# subset original vector of words to exclude words with non-ASCII characters
data <- characters.unlist[-characters.non.ASCII]
# convert vector back to a string
dat.1 <- paste(data, collapse = ", ")

# Now if you run 
characters.non.ASCII
[1] 1 2 3 7