r - 转换为正确的大小写,除非它是 R 中的 TLA

标签 r regex

我有一系列看起来像这样的字符值。 我希望它们看起来像这样。

然而,我有一组词,当完全匹配时,它们应该保持原样。在此列表中将包含 ABC 之类的内容。

对于输入

六六十个测试对象

不包括“六”

所需的输出将是“六个六十测试对象”。

我目前的代码是这样的:

x <- gsub(paste0("(", paste(exclusions, collapse = "|"), "|\\w)(\\w*)"), "\\U\\1\\L\\2", x, perl = T)

最佳答案

这是一种方法:

x <- "SIX SIXTY TEST SUBJECT"
output <- gsub("(?<=.)\\b(\\S)(\\S*)", "\\U\\1\\L\\2", x, perl=TRUE)
output

[1] "SIX Sixty Test Subject"

这里是对所用正则表达式的解释:

(?<=.)   assert that some text precedes (ignore the first uppercase word)
\\b     word boundary
(\\S)   match and capture the first character
(\\S*)  match and capture the remaining characters

然后我们用大写的第一个捕获字母替换,然后用小写的其余字符替换。请注意,正面前瞻 (?<=.)将从替换中保留第一个单词。

编辑:

相反,如果您想保留 字面词 SIX ,然后使用这个版本:

x <- "SIX SIXTY TEST SUBJECT"
output <- gsub("\\b(?!SIX\\b)(\\S)(\\S*)\\b", "\\U\\1\\L\\2", x, perl=TRUE)

关于r - 转换为正确的大小写,除非它是 R 中的 TLA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65606569/

相关文章:

regex - 如何使用 sed 忽略但保留 ANSI 转义码?

r - 将 MASS::fitdistr 按一个因子应用于多个数据

r - data.table 不计算 NA 组 by

r - knitr:在 Rmd 文档中编织单独的 Rnw 文档

regex - 不知道为什么我的正则表达式会抓取一些空白项目

JavaScript 正则表达式数字与包含单个零的字符串不匹配

java - 什么是匹配特定索引处字符的正则表达式?

python - 将正则表达式应用于 df 在新列中添加值

r - 如何在数据帧计算中用矢量函数替换 R 中的 for 循环?

r - lavaan 纵向不变性 CFA 与 R 中的 2 因子模型