这是一种 stringr 方法 . 正则表达式匹配 AA 前面有空格或字符串 (?<=^| ) 的开头,然后匹配尽可能少的字符 .*? 直到下一个空格或字符串 (?=$| ) 的结尾 . 请注意,您可以将所有字符串组合到一个向量中,并返回一个向量 . 如果你想要每个字符串的所有匹配项,那么使用 str_extract_all 而不是 str_extract ,你会得到一个包含每个字符串向量的列表 . 如果要指定多个匹配项,请使用选项和捕获组 (AA|BB) ,如图所示 .
mytext
as.character("HORSE MONKEY LIZARD AA12345 SWORDFISH"), # Return AA12345
as.character("ELEPHANT AA100 KOALA POLAR.BEAR"), # Want to return AA100,
as.character("AA3273 ELEPHANT KOALA POLAR.BEAR"), # Want to return AA3273
as.character("ELEPHANT KOALA POLAR.BEAR AA5785"), # Want to return AA5785
as.character("ELEPHANT KOALA POLAR.BEAR"), # Want to return nothing
as.character("ELEPHANT AA12345 KOALA POLAR.BEAR AA5785") # Can return only AA12345 or both
)
library(stringr)
mytext %>% str_extract("(?<=^| )AA.*?(?=$| )")
#> [1] "AA12345" "AA100" "AA3273" "AA5785" NA "AA12345"
mytext %>% str_extract_all("(?<=^| )AA.*?(?=$| )")
#> [[1]]
#> [1] "AA12345"
#>
#> [[2]]
#> [1] "AA100"
#>
#> [[3]]
#> [1] "AA3273"
#>
#> [[4]]
#> [1] "AA5785"
#>
#> [[5]]
#> character(0)
#>
#> [[6]]
#> [1] "AA12345" "AA5785"
as.character("TULIP AA999 DAISY BB123") %>% str_extract_all("(?<=^| )(AA|BB).*?(?=$| )")
#> [[1]]
#> [1] "AA999" "BB123"
由reprex package(v0.2.0)于2018-04-29创建 .