首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式在R中应用a和非b模式匹配

如何使用正则表达式在R中应用a和非b模式匹配
EN

Stack Overflow用户
提问于 2016-02-09 10:50:35
回答 2查看 334关注 0票数 2

我想通过只保留包含维度或包含度量而不是穿透的项来筛选列表。

我可以过滤到包含维度或度量和惩罚的那些,但我看不出如何将第二种情况的逻辑转换为度量而不是穿透

例子如下:

代码语言:javascript
复制
> library(stringr)

> var_list <- c("other", "dimension_1", "dimension_2", "metric_1", "metric_2", "metric_3_penetration")

> str_detect(var_list, "dimension|(?=.*metric)(?=.*penetration)")

[1] FALSE  TRUE  TRUE FALSE FALSE  TRUE

我想从str_detect返回的结果如下:

代码语言:javascript
复制
[1] FALSE  TRUE  TRUE TRUE TRUE FALSE
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 10:57:08

对于第二种情况,您可以使用负面和正面的外观组合:

代码语言:javascript
复制
> library(stringr)
> var_list <- c("other", "dimension_1", "dimension_2", "metric_1", "metric_2", "metric_3_penetration")
> str_detect(var_list, "dimension|^(?=.*metric)(?!.*penetration)")
[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE

^(?=.*metric)(?!.*penetration)正则表达式在字符串有metric而没有penetration时匹配。

若要只检查整个单词,请添加(?:\b|_)边界:

代码语言:javascript
复制
str_detect(var_list, "dimension|^(?=.*(?:\\b|_)metric(?:\\b|_))(?!.*(?:\\b|_)penetration(?:\\b|_))")
票数 1
EN

Stack Overflow用户

发布于 2016-02-09 14:50:12

grepl调用的逻辑组合很简单,不涉及包:

代码语言:javascript
复制
grepl("dimension",var_list) | (grepl("metric",var_list) & !grepl("penetration",var_list))
## [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档