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

前端之家收集整理的这篇文章主要介绍了正则表达式 – 语言环境何时影响R的正则表达式?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
R有几个特殊的与语言环境无关的正则表达式字符类.

从?正则表达式:

‘[[: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.

我想知道何时可能出现特定于语言环境的问题.

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

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导致传统的正则表达式类如[a-z]失败吗?

更新:我有一个部分答案:使用[a-zA-Z]与[[:alpha:]]的重音罗马字符表现不同.我仍然有兴趣知道是否有更多的差异示例,以及区域设置或编码是否会影响非罗马字符的匹配,实际上,您是如何匹配非罗马字符的.

解决方法

似乎重音罗马字符的行为存在差异.

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

奇怪的是,非罗马字符无法匹配任何一个字符类(至少在我尝试过的少数语言环境和编码中).

mu <- "\U03BC"
ya <- "\U044F"
jeem <- "\U062C"
grepl("[a-zA-Z]+",c(mu,ya,jeem))
## [1] FALSE FALSE FALSE
grepl("[[:alpha:]]",jeem))
## [1] FALSE FALSE FALSE

猜你在找的正则表达式相关文章