【问题标题】:Extract specific words from a text file?从文本文件中提取特定单词?
【发布时间】:2017-09-01 00:35:01
【问题描述】:

我有一个超过 10,000 行的文本文件,每行都有一个以 CDID_ 开头的单词,后跟 10 个没有空格的字符,如下所示:

a <- c("Test CDID_1254WE_1023 Sky","CDID_1254XE01478 Blue","This File named as CDID_ZXASWE_1111")

我想提取以 CDID_ 开头的单词,只是为了使上面的行看起来像这样:

CDID_1254WE_1023
CDID_1254XE01478
CDID_ZXASWE_1111

【问题讨论】:

    标签: r regex


    【解决方案1】:

    这是三个基本 R 选项。

    选项 1: 使用 sub(),删除除 CDID_* 部分之外的所有内容:

    sub(".*(CDID_\\S+).*", "\\1", a)
    # [1] "CDID_1254WE_1023" "CDID_1254XE01478" "CDID_ZXASWE_1111"
    

    选项2:使用regexpr(),提取CDID_*部分:

    regmatches(a, regexpr("CDID_\\S+", a))
    # [1] "CDID_1254WE_1023" "CDID_1254XE01478" "CDID_ZXASWE_1111"
    

    选项 3: 对于数据框结果,我们可以使用新的 strcapture() 函数 (v3.4.0) 并在一次调用中完成所有工作:

    strcapture(".*(CDID_\\S+).*", a, data.frame(out = character()))
    #                out
    # 1 CDID_1254WE_1023
    # 2 CDID_1254XE01478
    # 3 CDID_ZXASWE_1111
    

    【讨论】:

    • 还有stringr::str_extract(string = a, pattern = "CDID_\\S+")
    【解决方案2】:

    所有其他解决方案都很棒。这是使用 stringr 包中的函数的一种解决方案。我们可以先用str_split对字符串进行空格分割,将得到的列表转换成向量,然后用str_subset得到以CDID_开头的字符串。

    library(stringr)
    
    str_subset(unlist(str_split(a, pattern = " ")), "^CDID_")
    [1] "CDID_1254WE_1023" "CDID_1254XE01478" "CDID_ZXASWE_1111"
    

    【讨论】:

      【解决方案3】:

      我会使用 stringi 包的lookbehind:

      a <- c("Test CDID_1254WE_1023 Sky","CDID_1254XE01478 Blue","This File named as CDID_ZXASWE_1111")
      
      library(stringi)
      
      stringi::stri_extract_all_regex(a, '(?<=(^|\\s))(CDID_[^ ]+)')
      

      (?&lt;=(^|\\s)) = 前面有行首或空格;然后CDID_ AND 所有然后[^ ]+ = 后面不是空格的字符。

      [[1]]
      [1] "CDID_1254WE_1023"
      
      [[2]]
      [1] "CDID_1254XE01478"
      
      [[3]]
      [1] "CDID_ZXASWE_1111"
      

      您可能希望使用unlist 将其强制转换为向量。

      【讨论】:

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