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

10-11 10:21