代码之家  ›  专栏  ›  技术社区  ›  captcoma

r regex:将字符串与相邻的两个单词匹配,但例外

  •  0
  • captcoma  · 技术社区  · 6 年前

    我做了什么

    我写了一个正则表达式,它匹配所有文本字符串 "A" "BV" 在使用本教程之间使用0-10个单词: https://www.regular-expressions.info/near.html

    df<- data.frame(text=c("ART 6 dasd asd NOT art 2 BV","NOT ART 6 ds as dd BV","ART 6 NO BV"),
                    id=c(1,2,3))
    
    
    
    subset(df, grepl("(ART)(?:\\W+\\w+){0,10}?\\W+(\\bBV\\b)",
                       perl=TRUE,
                       ignore.case = TRUE,
                       text))
    
    
                             text id
    1 ART 6 dasd asd NOT art 2 BV  1
    2       NOT ART 6 ds as dd BV  2
    3                 ART 6 NO BV  3
    

    我想得到的

    现在,我想重写如果列表中出现任何单词(即 NOT NO 在示例数据中)在“a”和“bv”之间的0-10个字中。

    结果是:

    subset(df, grepl("NEWREGEX",
                       perl=TRUE,
                       ignore.case = TRUE,
                       text))
    
    
                             text id
    1        NOT ART 6 ds as dd BV  2
    

    我想我可以用 ?! 但我想不出来

    1 回复  |  直到 6 年前
        1
  •  0
  •   captcoma    6 年前

    多亏了 阿克兰 我们有一个非常好的解决方案:

    library(stringr)
    str_extract(df$text, "(A\\w+\\b.*\\bBV\\b)") %>% str_detect("NOT?") %>% '!' %>% magrittr::extract(df, ., )