在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
相关产品推荐
相关产品推荐

