如何将连字符后的小写字母替换为大写字母

Jaa*_*aap 1 regex r substitution uppercase

在我的数据框中,我有一个列,其中包含小写的议会成员的姓氏。我将第一个字母替换为大写(来自此答案):

# vector with names
lastname <- c("wortmann-kool", "mulder", "nistelrooij", "camp", "schaake", "veld", "lange", "oomen-ruijten")
# substituting first letter with uppercase
lastname <- gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2", lastname, perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有些名字带有连字符来分隔已婚女性的两个名字。如何将连字符后的第一个字母替换为大写?

dev*_*ull 5

为什么不简单地将单词边界后的第一个字母大写?

> lastname <- c("wortmann-kool", "mulder", "nistelrooij", "camp", "schaake", "veld", "lange", "oomen-ruijten")
> gsub("\\b(\\w)", "\\U\\1", lastname, perl = TRUE)
[1] "Wortmann-Kool" "Mulder"        "Nistelrooij"   "Camp"         
[5] "Schaake"       "Veld"          "Lange"         "Oomen-Ruijten"
> 
Run Code Online (Sandbox Code Playgroud)

引用文档

仅对于 perl = TRUE,它还可以包含“\U”或“\L”以将替换的其余部分转换为大写或小写,并包含“\E”以结束大小写转换。

## capitalizing
txt <- "a test of capitalizing"
gsub("(\\w)(\\w*)", "\\U\\1\\L\\2", txt, perl=TRUE)
gsub("\\b(\\w)",    "\\U\\1",       txt, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)