【问题标题】:Regex to extract two specifc words from string正则表达式从字符串中提取两个特定单词
【发布时间】:2020-06-15 09:56:18
【问题描述】:

我正在解析一些文件,并计划从文件中的某个位置提取信息,但由于特殊字符而失败。我需要的单词仍然包含在文件名中,但其中还有其他内容。

我假设您可以使用正确的正则表达式提取那些,但我无法这样做。 原点是最后一个和倒数第二个下划线之间的单词。 目标是 .rds 和最后一个下划线之间的单词

name1<-"2020-06-15 11_41_40_Magdeburg_Bitterfeld-Wolfen.rds"
name2<-"2020-06-15 11_41_53_Niebüll_Sylt OT Westerland.rds"
name3<-"2020-06-15 11_41_57_Augsburg_Düsseldorf.rds"

我分别解析每个文件并提供了三个示例。我会期待

name1_orgin<-"Magdeburg"
name1_dest<- "Bitterfeld-Wolfen"
name2_orgin<-"Niebüll"
name2_dest<- "Sylt OT Westerland"
name3_orgin<-"Augsburg"
name3_dest<- "Düsseldorf

【问题讨论】:

    标签: r split strsplit


    【解决方案1】:

    你可以使用str_match

    stringr::str_match(c(name1, name2, name3), '.*_(.*)_(.*)\\.rds')[, -1]
    
    #     [,1]        [,2]                
    #[1,] "Magdeburg" "Bitterfeld-Wolfen" 
    #[2,] "Niebüll"   "Sylt OT Westerland"
    #[3,] "Augsburg"  "Düsseldorf"        
    

    【讨论】:

    • thx 我希望我明白这是如何工作的,但它确实有效 :)
    • (.*) 用作捕获组以捕获下划线之间的值。默认情况下,正则表达式是贪婪的,因此它会在匹配之前尝试捕获尽可能多的字符。
    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    相关资源
    最近更新 更多