【问题标题】:How to substitute a lowercase letter after a hyphen with its uppercase如何用大写字母替换连字符后的小写字母
【发布时间】:2014-06-20 23:09:42
【问题描述】:

在我的数据框中,我有一列用小写的 parlement 成员的姓氏。我用(来自this answer)的大写替换了第一个字母:

# 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)

如您所见,某些名称使用连字符来分隔已婚妇女的两个名称。如何将连字符后的第一个字母替换为大写?

【问题讨论】:

  • 必须在一个gsub 中吗? gsub("-([a-z])", "-\\U\\1", gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2", lastname, perl = TRUE))

标签: regex r substitution uppercase


【解决方案1】:

为什么不简单地将word boundary 后面的第一个字母大写?

> 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"
> 

引用documentation:

仅对于 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)

【讨论】:

  • 赞成紧凑和高效。 :)
  • 非常好。该选项是否记录在 R 中的某处,或者大写的 "\\U" 来自 PCRE 库并记录在其文档中的某处但不在 R 中?
  • @JoshO'Brien 这是文档,也许不是最易读的方式。将文档中的相关 sn-ps 添加到答案中。
【解决方案2】:

这适用于您可能有的任何标点符号

gsub("(^|[[:punct:]])([[:alpha:]])", "\\1\\U\\2", lastname, perl=TRUE)

##[1] "Wortmann-Kool" "Mulder"        "Nistelrooij"   "Camp"         
##[5] "Schaake"       "Veld"          "Lange"         "Oomen-Ruijten"

这仅适用于连字符

gsub("(^|-)([[:alpha:]])", "\\1\\U\\2", lastname, perl=TRUE)

##[1] "Wortmann-Kool" "Mulder"        "Nistelrooij"   "Camp"         
##[5] "Schaake"       "Veld"          "Lange"         "Oomen-Ruijten"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 2014-01-11
    • 1970-01-01
    • 2021-01-06
    • 2019-08-08
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多