目标: 至少一次返回带有“ 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()语句吗?
欢迎使用其他方法
答案 0 :(得分:1)
如果您确实要使用对grepl
的单个调用,那么我们可以尝试使用以下单个正则表达式模式:
\bTAX\b.*\bGAP\b|\bGAP\b.*\bTAX\b
此模式使用替代来检查可能发生TAX
和GAP
的两个顺序。另请注意,TAX
和GAP
的两边都被单词边界标记(\b
)包围,以确保我们不会意外匹配例如TAX
碰巧出现在较大字词的子串中,例如TAXES
。
grepl("\\bTAX\\b.*\\bGAP\\b|\\bGAP\\b.*\\bTAX\\b", K)
[1] FALSE TRUE TRUE TRUE FALSE