【问题标题】:Extracting everything between two symbols in a string提取字符串中两个符号之间的所有内容
【发布时间】:2014-02-16 15:13:41
【问题描述】:

我有一个包含一些名称的向量。我想提取每一行的标题,基本上是“,”(包括空格)和“。”之间的所有内容

> head(combi$Name)
[1] "Braund, Mr. Owen Harris"
[2] "Cumings, Mrs. John Bradley (Florence Briggs Thayer)"
[3] "Heikkinen, Miss. Laina"
[4] "Futrelle, Mrs. Jacques Heath (Lily May Peel)"
[5] "Allen, Mr. William Henry"
[6] "Moran, Mr. James"

我想gsub 可能有用,但我很难找到正确的正则表达式来满足我的需求。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    1) 子sub

    > sub(".*, ([^.]*)\\..*", "\\1", Name)
    [1] "Mr"   "Mrs"  "Miss" "Mrs"  "Mr"   "Mr"  
    

    1a) 子变体 这种带有gsub 的方法也适用:

    > sub(".*, |\\..*", "", Name)
    [1] "Mr"   "Mrs"  "Miss" "Mrs"  "Mr"   "Mr"  
    

    2) strapplyc 或在 gusbfn 包中使用 strapplyc 可以使用更简单的正则表达式来完成:

    > library(gsubfn)
    >
    > strapplyc(Name, ", ([^.]*)\\.", simplify = TRUE)
    [1] "Mr"   "Mrs"  "Miss" "Mrs"  "Mr"   "Mr"  
    

    2a) strapplyc 变体 这似乎是所有正则表达式中最简单的。

    > library(gsubfn)
    >
    > sapply(strapplyc(Name, "\\w+"), "[", 2)
    [1] "Mr"   "Mrs"  "Miss" "Mrs"  "Mr"   "Mr"  
    

    3) strsplit 第三种方式是使用strsplit

    > sapply(strsplit(Name, ", |\\."), "[", 2)
    [1] "Mr"   "Mrs"  "Miss" "Mrs"  "Mr"   "Mr"  
    

    添加额外的解决方案。将gsub 更改为sub(尽管gsub 也可以使用)。

    【讨论】:

    • 谢谢!它完美地工作。我需要学习一点正则表达式。
    • 我发现了一个结果错误的案例:"Rothschild, Mrs. Martin (Elizabeth L. Barrett)"。使用gsub 命令,结果为:" Mrs. Martin (Elizabeth L"。提前谢谢你
    • 好的。已修改 1 和 2 来处理该问题。 1a 和 3 已经处理好了。
    【解决方案2】:

    请注意,G. Grothendieck 的回答缺少任何内容。我只想添加一个使用sub 和非贪婪重复的解决方案:

    vec <- c("Moran, Mr. James",
             "Rothschild, Mrs. Martin (Elizabeth L. Barrett)")
    
    sub(".*, (.+?)\\..*", "\\1", vec)
    # [1] "Mr"  "Mrs"
    

    regexprregmatches 和lookbehind/lookahead 的另一种选择:

    regmatches(vec, regexpr("(?<=, ).+?(?=\\.)", vec, perl = TRUE))
    # [1] "Mr"  "Mrs"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多