grepl 在 R 中至少包含一次多重模式

grepl contain multi pattern at least one time in R

目标: return 个元素 "TAX" 和 "GAP" 至少一次,不关心它们在字符串中的位置。

#STRING
K <- c("TAX","TAX GAP","GAP TAX","GAP of TAX","GAP") # 1st , 5th should be FALSE

#Solution
K[grepl("TAX",K) & grepl("GAP",K)]

# WRONG apporach
grepl("TAX|GAP",K)  --> Only one side
grepl("TAX+GAP+",K) --> The positions are fixed , impossible to write all the possibilities

我可以用正则表达式在一行中写多个 grepl() 语句吗?

欢迎使用任何其他方法

如果您真的想使用对 grepl 的单个调用,那么我们可以尝试使用以下单个正则表达式模式:

\bTAX\b.*\bGAP\b|\bGAP\b.*\bTAX\b

此模式使用 交替 来检查可能出现 TAXGAP 的两个顺序。另请注意,TAXGAP 的每一侧都被单词边界标记 (\b) 包围,以确保我们不会意外匹配,例如TAX 当它恰好出现在像 TAXES.

这样的较大单词的子串中时
grepl("\bTAX\b.*\bGAP\b|\bGAP\b.*\bTAX\b", K)
[1] FALSE  TRUE  TRUE  TRUE FALSE