2

我想从带有“ M_South_Africa_5_14 ”和“ P_Zimbabwe_Tot ”等字符串的向量中提取国家/地区。我一直在尝试使用单个 grep 或 stringr::str.extract 语句来完成它,但没有成功。当然,我可以用 '_' 打破字符串,然后收集碎片,但是可以用正则表达式来做到这一点吗?

grep(value = TRUE, 
     x = 'M_South_Africa_5_14', 
     pattern = '(?!^[PMF]{1})(?![_])([A-Za-z]{2,20})[_][A-Za-z]{2,20}(?!$)|(?!^[PMF]{1})(?![_])([A-Za-z]{2,20})', 
     perl = TRUE)

当然,简化这个正则表达式怪物会很棒,但我实际上想知道我是否可以在 R 上运行正则表达式查找。

4

1 回答 1

4

这适用于您的示例:

> library(gsubfn)
> x <- c('M_South_Africa_5_14', 'P_Zimbabwe_Tot')
> pat <- "_(.*\\D)_"
> strapplyc(x, pat)
[[1]]
[1] "South_Africa"

[[2]]
[1] "Zimbabwe"
于 2013-02-21T00:02:19.900 回答