我想通过只保留包含维度或包含度量而不是穿透的项来筛选列表。
我可以过滤到包含维度或度量和惩罚的那些,但我看不出如何将第二种情况的逻辑转换为度量而不是穿透
例子如下:
> 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返回的结果如下:
[1] FALSE TRUE TRUE TRUE TRUE FALSE发布于 2016-02-09 10:57:08
对于第二种情况,您可以使用负面和正面的外观组合:
> 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|_)边界:
str_detect(var_list, "dimension|^(?=.*(?:\\b|_)metric(?:\\b|_))(?!.*(?:\\b|_)penetration(?:\\b|_))")发布于 2016-02-09 14:50:12
grepl调用的逻辑组合很简单,不涉及包:
grepl("dimension",var_list) | (grepl("metric",var_list) & !grepl("penetration",var_list))
## [1] FALSE TRUE TRUE TRUE TRUE FALSEhttps://stackoverflow.com/questions/35290095
复制相似问题