【问题标题】:remove single character in string删除字符串中的单个字符
【发布时间】:2017-05-17 00:24:29
【问题描述】:

寻找一个可以从字符串中删除单个字符的正则表达式,有几个条件。一个正则表达式将删除字符串中的所有单个字符,而另一个正则表达式将仅删除第一个和最后一个字符之间的单个字符。请参阅下面的示例。

删除所有单个字符:

之前

names <- c("John C. Smith", "Chris T. Anderson", "Mary H. Jane",
           "J. J. Smith", "J. Thomas")

之后:

"John Smith", "Chris Anderson", "Mary Jane", "Smith", "Thomas"

删除单个字符,排除第一个和最后一个字符

之前

names <- c("John C. Smith", "Chris T. Anderson", "Mary H. Jane",
           "J. J. Smith", "J. Thomas")

之后:

"John Smith", "Chris Anderson", "Mary Jane", "J. J. Smith", "J. Thomas"

【问题讨论】:

    标签: r regex


    【解决方案1】:

    已编辑,因为我错过了部分问题

    gsub 可以从您的数据中删除模式。在这里,我们删除前后都有多个字符串的单个字符。

    gsub("(\\w\\w)\\W+\\w\\W+(\\w\\w)", "\\1 \\2", names)
    [1] "John Smith"     "Chris Anderson" "Mary Jane"   "J. J. Smith" "J. Thomas"
    

    摆脱所有这些。

    gsub("\\W*\\b\\w\\b\\W*", " ", names)
    [1] "John Smith"     "Chris Anderson" "Mary Jane"      "  Smith"        " Thomas" 
    

    【讨论】:

    • 感谢@G5W!我将使用它来确定如何对所有字符执行此操作,包括字符串开头的字符。谢谢。
    【解决方案2】:

    这是另一种选择

    gsub("\\b[A-Z][[:punct:]]\\s*", "", names)
    #[1] "John Smith"     "Chris Anderson" "Mary Jane"      "Smith"         
    #[5] "Thomas"        
    

    或者对于第二种情况

    sub("(\\w+)\\s+([A-Z][[:punct:]]\\s*){1,}", "\\1 ", names)
    #[1] "John Smith"     "Chris Anderson" "Mary Jane"      "J. J. Smith"   
    #[5] "J. Thomas"     
    

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2014-12-16
      • 2017-04-30
      • 2023-03-14
      相关资源
      最近更新 更多