首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >[:alpha:]类与[alpha]类之间的区别;[:alpha:] OS独立吗?

[:alpha:]类与[alpha]类之间的区别;[:alpha:] OS独立吗?
EN

Stack Overflow用户
提问于 2021-10-09 01:44:37
回答 1查看 299关注 0票数 5

我一直听说[:alpha:]字符类等同于[A-Za-z],但是在下面的输出中,不管我使用的是gsub (带和不带perl = TRUE)还是stringi,情况似乎并非如此。[:alpha:]似乎匹配非ascii字符,但我可能是误解了。使用?regex告诉我:

某些命名的字符类是预定义的。它们的解释取决于地区(见地区);下面的解释是POSIX语言环境的解释。

但我还是不明白区别。对我来说,[A-Za-z]正好匹配52个字符,而[:alpha:]匹配的字符要多得多。

问题

  1. [:alpha:]类和[:alpha:]到底有什么区别?[:alpha:]匹配吗?
  2. [:alpha:]在世界各地不同的操作系统和位置上工作是否相同?

代码语言:javascript
运行
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-11 18:11:51

  1. [:alpha:]代表“字母字符:”。[:alpha:],与[:digit:]相反。这实际上包括字符编码中的每个字母字符。而[a-zA-Z]则捕捉符号a和z以及A和Z之间的任何字符。正如@Charles所指出的,这些字符的区域顺序可能不同,因此其他字符也可以包含在内。然而,在标准英语UTF-8中,这只包括标准英语字母(26个字母*2个小写和大写=52个),因此不包括来自其他语言的任何字母,如

等。

  1. [:alpha:]将匹配所有字母字符。

  1. 是的,因为[:alpha:]匹配所有字母字符,所以它在不同的语言、操作系统或位置上的工作方式是相同的。

为了提供更多的上下文,在R中实现的regex函数(由greplregexprgregexprsubgsub等使用)遵循POSIX 1003.2标准。这意味着匹配的基础是:

用于编码字符的位模式,而不是在字符的图形表示上。

下面是Sys.getlocale(category = "LC_ALL")“en_GB.UTF-8”不同语言字符的变体示例:

代码语言:javascript
运行
复制
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] "敏捷的棕色狐狸跨过懒狗"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69503135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档