r - R 中非 ASCII 字符的正向后视

标签 r regex

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

相关文章:

R DPLYR 按组计数值

正则表达式不能与 sed 一起正常工作,但可以在 regex101 中工作

javascript - 格式化电子邮件正文的 JSON

r - 关于如何使用 R 和 ggplot2 绘制背靠背图的问题

r - R 中的函数类似于月份的第一个字母的 month.abb?

r - 连接绘图标签列表

rvest:选择一个选项并提交表格

python - 如何创建一个 RegExp 以匹配最后的 3 个唯一字符和 2 个可选字符?

regex - 是否有正则表达式可以替换VIM中nn :nn:nn. nn中的前导零(最后一个除外)和冒号?

c++ - 为什么 regex_match 与我的正则表达式不匹配?