我有一个 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/