我想从包含“ 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上运行正则表达式查找。
答案 0 :(得分: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"