【问题标题】:Change string in "-" and capital letter to no capital letter and space in R将“-”中的字符串和大写字母更改为R中的无大写字母和空格
【发布时间】:2021-08-13 21:47:57
【问题描述】:

我在使用正则表达式时遇到了一些问题,希望您能帮助我。 我有一个如下所示的数据集:

name <- c("Chester-le-Street",  
      "Westbury-on-Trym",
      "Easton-in-Gordano",  
      "Weston-super-Mare",
      "Bourne End-cum-Hedsor",
      "Amersham-on-the-Hill East",
      "South Westbury-on-Trym")

我想做的主要是两件事:

  1. 删除符号“-”
  2. 将“-”后面的第一个字母替换为大写字母。

以某种方式导致以下结果:

target_name <- c("Chester Le Street",   
          "Westbury On Trym",
          "Easton In Gordano",  
          "Weston Super Mare",
          "Bourne End Cum Hedsor",
          "Amersham On The Hill East",
          "South Westbury On Trym")

一直在尝试许多不同的事情,这些事情需要很长时间,但我仍然无法完全得到我想要的东西。 非常感谢任何帮助! 谢谢。

【问题讨论】:

    标签: r regex string dplyr tidyverse


    【解决方案1】:
    library(stringr)
    
    name <- c("Chester-le-Street",  
              "Westbury-on-Trym",
              "Easton-in-Gordano",  
              "Weston-super-Mare",
              "Bourne End-cum-Hedsor",
              "Amersham-on-the-Hill East",
              "South Westbury-on-Trym")
    
    name %>%
      str_replace_all("-", " ") %>%
      str_to_title()
    

    【讨论】:

    • 您好,欢迎来到 SO。似乎您对这里的任何帖子的第一个答案。 str_to_title 也可能将不需要的字符大写,尽管在给定的示例中它可能会产生相同的结果。 :)
    【解决方案2】:

    您可以使用-(\w) 作为您的模式,即一个破折号后跟一个字母。将字母捕获为组 1,然后将其替换为空格和捕获的组 1 的大写字母。即 \U\1。请注意,为此,我们转义了\,因此在 R 代码中有 2 个反斜杠

    gsub("-(\\w)", " \\U\\1", name, perl = TRUE)
    [1] "Chester Le Street"         "Westbury On Trym"          "Easton In Gordano"        
    [4] "Weston Super Mare"         "Bourne End Cum Hedsor"     "Amersham On The Hill East"
    [7] "South Westbury On Trym"  
    

    或者:

    library(stringr)
    str_to_title(str_replace_all(name, '-', ' '))
    [1] "Chester Le Street"         "Westbury On Trym"          "Easton In Gordano"        
    [4] "Weston Super Mare"         "Bourne End Cum Hedsor"     "Amersham On The Hill East"
    [7] "South Westbury On Trym"  
    

    【讨论】:

    • 即将发布 gsub('-(.)', ' \\U\\1', name, perl = T) 为你的 +1 点赞
    • @AnilGoyal 我一开始确实发布了,然后选择了\w
    • 是的,我认为\\w是支持.的好选择
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2019-08-08
    • 2012-01-03
    • 1970-01-01
    • 2020-01-04
    • 2015-10-24
    • 2018-12-13
    • 2013-02-04
    相关资源
    最近更新 更多