我有一个 R 函数,它试图将每个“单词”的第一个字母大写
proper = function(x){
gsub("(?<=\\b)([[:alpha:]])", "\\U\\1", x, perl = TRUE)
}
这工作得很好,但是当我有一个带有毛利语长音的单词时,例如
Māori
我得到了不正确的大写,例如> proper("Māori")
[1] "MāOri"
显然,RE 引擎认为宏
ā
是一个词边界。不知道为什么。
最佳答案
由于您使用的是 PCRE 正则表达式引擎(通过 perl=TRUE
启用),您必须通过 (*UCP)
标记到正则表达式,以便所有速记和单词边界都可以检测到 Unicode 文本中的正确符号/位置:
proper = function(x){
gsub("(*UCP)\\b([[:alpha:]])", "\\U\\1", x, perl = TRUE)
}
proper("Māori")
## [1] "Māori"
见 R demo .
请注意
\b
已经是一个零宽度断言,不必放入正向后视,即 (?<=\b)
= \b
.
关于r - R 中非 ASCII 字符的正向后视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605156/