gpt4 book ai didi

regex - 语言环境何时会影响 R 的正则表达式?

转载 作者:行者123 更新时间:2023-12-01 05:16:15 25 4
gpt4 key购买 nike

R 有几个特殊的与语言环境无关的正则表达式字符类。

来自 ?regex :

‘[[:alnum:]]’ means ‘[0-9A-Za-z]’, except the latter depends upon the locale and the character encoding, whereas the former is independent of locale and character set.



我想知道什么时候会出现特定于语言环境的问题。

我根据 ?Comparison 中的信息尝试了两个示例帮助页面,描述字符串的排序方式:

in Estonian ‘Z’ comes between ‘S’ and ‘T’





in Danish ‘aa’ sorts as a single letter, after ‘z’



在第一个示例中,我希望 T、U、V、W、X 和 Y 不匹配。在第二个示例中,我希望 aa 不匹配。
Sys.setlocale("LC_ALL", "Estonian")
grepl("[A-Z]", LETTERS)

Sys.setlocale("LC_ALL", "Danish")
grepl("[a-z]", "aa")

由于所有值都返回 TRUE ,看来locale在这里不是问题。

你能找到一个例子,其中 locale 导致传统的正则表达式类,如 [a-z]失败?

更新:我有一个部分答案:重音罗马字符使用 [a-zA-Z] 表现不同对比 [[:alpha:]] .我仍然很想知道是否有更多差异示例,以及语言环境或编码是否会影响非罗马字符的匹配,以及您如何匹配非罗马字符。

最佳答案

重音罗马字符的行为似乎有所不同。

grepl("[a-zA-Z]", c("å", "é"))
## [1] FALSE FALSE
grepl("[[:alpha:]]", c("å", "é"))
## [1] TRUE TRUE

奇怪的是,非罗马字符无法与任一字符类匹配(至少在我尝试的少数语言环境和编码中)。
mu <- "\U03BC"
ya <- "\U044F"
jeem <- "\U062C"
grepl("[a-zA-Z]+", c(mu, ya, jeem))
## [1] FALSE FALSE FALSE
grepl("[[:alpha:]]", c(mu, ya, jeem))
## [1] FALSE FALSE FALSE

关于regex - 语言环境何时会影响 R 的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com