我一直听说[:alpha:]
字符类等同于[A-Za-z]
,但是在下面的输出中,不管我使用的是gsub
(带和不带perl = TRUE
)还是stringi
,情况似乎并非如此。[:alpha:]
似乎匹配非ascii字符,但我可能是误解了。使用?regex
告诉我:
某些命名的字符类是预定义的。它们的解释取决于地区(见地区);下面的解释是POSIX语言环境的解释。
但我还是不明白区别。对我来说,[A-Za-z]
正好匹配52个字符,而[:alpha:]
匹配的字符要多得多。
问题
[:alpha:]
类和[:alpha:]
到底有什么区别?[:alpha:]
匹配吗?[:alpha:]
在世界各地不同的操作系统和位置上工作是否相同?x <- c(
"danish characteøs sentåment æcores words correctly 456",
"It works with probleme but not with problème 234"
)
gsub("[[:alpha:] ]", '', x)
## "456" "234"
gsub("[a-zA-Z ]", '', x)
## [1] "øåæ456" "è234"
stringi::stri_replace_all_regex(x, "[[:alpha:] ]", '')
## "456" "234"
stringi::stri_replace_all_regex(x, "[a-zA-Z ]", '')
## [1] "øåæ456" "è234"
发布于 2021-10-11 18:11:51
[:alpha:]
代表“字母字符:”。[:alpha:]
,与[:digit:]
相反。这实际上包括字符编码中的每个字母字符。而[a-zA-Z]
则捕捉符号a和z以及A和Z之间的任何字符。正如@Charles所指出的,这些字符的区域顺序可能不同,因此其他字符也可以包含在内。然而,在标准英语UTF-8中,这只包括标准英语字母(26个字母*2个小写和大写=52个),因此不包括来自其他语言的任何字母,如等。
[:alpha:]
将匹配所有字母字符。[:alpha:]
匹配所有字母字符,所以它在不同的语言、操作系统或位置上的工作方式是相同的。为了提供更多的上下文,在R中实现的regex
函数(由grepl
、regexpr
、gregexpr
、sub
或gsub
等使用)遵循POSIX 1003.2标准。这意味着匹配的基础是:
用于编码字符的位模式,而不是在字符的图形表示上。
下面是Sys.getlocale(category = "LC_ALL")
“en_GB.UTF-8”不同语言字符的变体示例:
fr_chr <- "Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwi."
ge_chr <- "Fix, Schwyz! quäkt Jürgen blöd vom Paß."
gr_chr <- "Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός."
en_chr <- "Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth."
cn_chr <- "敏捷的棕色狐狸跨过懒狗"
gsub("[[:alpha:]]","",fr_chr)
[1] " ’ ."
gsub("[[:alpha:]]","",ge_chr)
[1] ", ! ."
gsub("[[:alpha:]]","",gr_chr)
[1] " , ."
gsub("[[:alpha:]]","",en_chr)
[1] ", , ."
gsub("[[:alpha:]]","",cn_chr)
[1] ""
gsub("[A-Za-z]","",fr_chr)
[1] " ë ’ œ é éè ."
gsub("[A-Za-z]","",ge_chr)
[1] ", ! ä ü ö ß."
gsub("[A-Za-z]","",gr_chr)
[1] "Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός."
gsub("[A-Za-z]","",en_chr)
[1] ", , ."
gsub("[A-Za-z]","",cn_chr)
[1] "敏捷的棕色狐狸跨过懒狗"
https://stackoverflow.com/questions/69503135
复制相似问题