You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中用正则表达式筛选:移除第二个下划线后含O的元素

问题

现有如下R字符向量:

my.ds <- c("Novo_Oeste_CANTODOPINHE_2O","Novo_Oeste_CANTODOPINHE_30O",
"Novo_Oeste_CANTODOPINHE_32O","Novo_Oeste_CANTODOPINHE_33O",
"Novo_Oeste_CANTODOPINHE_34O","Novo_Oeste_CANTODOPINHE_35O",
"Novo_Oeste_CANTODOPINHE_30","Novo_Oeste_CANTODOPINHE_492",
"Novo_Oeste_CANTODOPINHE_493","Novo_Oeste_CANTODOPINHE_494")

需要移除所有**第二个下划线_之后包含字符O**的元素,期望输出:

sel.ds
[1] "Novo_Oeste_CANTODOPINHE_30" "Novo_Oeste_CANTODOPINHE_492" 
[2] "Novo_Oeste_CANTODOPINHE_493" "Novo_Oeste_CANTODOPINHE_494" 
解决方案

可以利用正则表达式结合grepl()函数筛选目标元素:

# 定义原始向量
my.ds <- c("Novo_Oeste_CANTODOPINHE_2O","Novo_Oeste_CANTODOPINHE_30O",
"Novo_Oeste_CANTODOPINHE_32O","Novo_Oeste_CANTODOPINHE_33O",
"Novo_Oeste_CANTODOPINHE_34O","Novo_Oeste_CANTODOPINHE_35O",
"Novo_Oeste_CANTODOPINHE_30","Novo_Oeste_CANTODOPINHE_492",
"Novo_Oeste_CANTODOPINHE_493","Novo_Oeste_CANTODOPINHE_494")

# 筛选第二个下划线后不含O的元素
sel.ds <- my.ds[!grepl("^[^_]+_[^_]+_.*O", my.ds)]

# 查看结果
sel.ds

正则说明

^[^_]+_[^_]+_.*O 的含义:

  • ^:匹配字符串开头
  • [^_]+:匹配任意非下划线字符(第一个下划线前的内容)
  • _[^_]+_:匹配第二个下划线及之前的内容
  • .*O:匹配第二个下划线之后包含O的任意内容
  • !:取反,保留不满足上述匹配条件的元素

内容的提问来源于stack exchange,提问作者Leprechault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:10:34