我一直听说 [:alpha:]
字符类等同于 [A-Za-z]
,但从下面的输出结果来看,无论我是使用 gsub
(带或不带 perl = TRUE
)还是 stringi
,这似乎并不是真的。似乎 [:alpha:]
匹配非 ASCII 字符,但我可能误解了。通过使用 ?regex
告诉我:
某些命名字符类是预定义的。它们的解释取决于语言环境(请参阅 locales),下面的解释是 POSIX 语言环境的解释。
但我仍然不理解其中的区别。对我来说,[A-Za-z]
精确地匹配 52 个字符,而 [:alpha:]
匹配更多。
问题
[:alpha:]
类与[a-zA-Z]
之间有什么区别?[: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"