R 中的文本大写并带有例外列表

kil*_*all 6 regex r

*抱歉,我应该说得更清楚(不过我真的很感谢所有的帮助!)

我从数据库中提取 .csv 文件。该文件包含地名列表。我在提取它们时使用 INITCAP,因此它们都是正确的混合大小写。然而,其中一些地名需要保持大写,因为它们是已知的缩写,例如大学等。最终结果是我将其以正确的格式放回到数据库中。

我是 R 新手,遇到了一些问题。我正在提取全部大写的数据,但我需要它是正确的大小写,即将“这是全部大写”更改为“这是全部大写”,但我需要能够排除某些单词。像“FYI”和其他缩写一样的东西需要保持大写。我已经成功解决了 lettercase 库的一些问题,特别是 str_ucfirst。我唯一剩下的问题是异常部分。任何建议,将不胜感激。谢谢。

Jan*_*Jan 6

基于@akrun(现已删除)的解决方案,您可以形成一个异常向量,然后paste0使用以下方法将其转换为正则表达式(*SKIP)(*FAIL)

string <- "THIS IS ALL CAPS"
exceptions <- c("FYI", "THIS")
pattern <- sprintf("(?:%s)(*SKIP)(*FAIL)|\\b([A-Z])(\\w+)", paste0(exceptions, collapse = "|"))
gsub(pattern, "\\1\\L\\2", string, perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

哪个产量

[1] "THIS Is All Caps"
Run Code Online (Sandbox Code Playgroud)

请注意THIS被忽略的内容。


模式是

unimportant|not_important|(very important)
Run Code Online (Sandbox Code Playgroud)

就支持它的正则表达式引擎而言,这是

...(*SKIP)(*FAIL)|what_i_want_to_match
Run Code Online (Sandbox Code Playgroud)

在这种情况下

\b      # a word boundary
([A-Z]) # uppercase letters
(\w+)   # [a-zA-Z0-9_]+
Run Code Online (Sandbox Code Playgroud)

这被输入到替换子例程中。