我有一个字符串列表:

str1 <- "core21_ap_202003.xlsx"
str2 <- "core21_ap_thailand_202004.xlsx"
str3 <- "core17_eay_201008_b.xlsx"

strings <- list(str1, str2, str3)

我想提取"AP"、"AP_泰国"和"eay".我试过了:

gsub("_[^_]*$|^[^_]*_","", strings, perl=T)

输出:

[1] "ap"  "ap_thailand"  "eay_201008" 

前两个人都行,但最后一个人不行.我需要"eay",不是"eay_201008".

换句话说,一个国家名称(这里是泰国)只有当它存在时才被提取,然后永远不应该提取日期.

请注意,情况并非如此.

[1] "ap"  "ap_thailand"  "eay" 

推荐答案

查找从第一个下划线开始的所有内容,然后是所有内容,直到下划线和6位数字,然后是任何内容.把那部分留在下腹之间.

strings |>
  unlist() |>
  sub(".*?_(.*)_\\d{6}.*", "\\1", x = _) 
## [1] "ap"          "ap_thailand" "eay"   

R相关问答推荐

在边界外添加注释或标题

工作流程_set带有Dplyrr风格的 Select 器,用于 Select 结果和预测因子R

从嵌套列表中智能提取线性模型系数

R等效于LABpascal(n,1)不同的列符号

迭代通过1个长度的字符串长字符R

错误:非常长的R行中出现意外符号

R-更新面内部的栅格值

R函数‘paste`正在颠倒其参数的顺序

使用Facet_WRAP时更改框图中线的 colored颜色

计算满足R中条件的连续列

根据类别合并(汇总)某些行

哪一行和行和 Select 特定行,但是考虑到Nas

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

Geom_arcbar()中出错:找不到函数";geom_arcbar";

在ggploy中创建GeV分布时出错

TidyVerse中长度不等的列结合向量

将边列表转换为路径长度列表

在R中添加要打印的垂直线

具有某些列的唯一值的数据帧