从正则表达式匹配中排除表达式

exclude expression from regex match

我已经浏览了关于正则表达式的 SO 的不同页面(以及许多与否定、否定、排除、过滤等相关的正则表达式问题)以找到正则表达式的解决方案,但到目前为止没有任何运气。

我有以下条目列表:

poliester 6 blanco cod 3 xyz
pol 6 negro cod 3 abc
poliester 6 verde cod 7
pol 6 vde cod 7
pol 4 amarillo cod 3
poliester 3 zapote cod 7
poliester 6 cafe
poliester 6 negro cod 4 jpg
poliester 3 456 verde cod 3
pol 6 blanco cod 2

其中我需要获取包含 pol.* 6 .*cod 3cod 7 或未提及 cod 4cod 2 的那些。

我在 regex101.com 尝试过的许多正则表达式都失败了,因为它们检索到对 cod 4cod 2 的提及,或者因为它们未能检索到 poliester 6 cafe行。

下面是我尝试过的一些正则表达式:

pol.* 6 .*(cod [^42])
pol.* 6 .*((?!cod [^42])|cod 3|cod 7).*
pol.* 6 .*((?<!cod [^42])|cod 3|cod 7).*

预期结果是:

poliester 6 blanco cod 3 xyz
pol 6 negro cod 3 abc
poliester 6 verde cod 7
pol 6 vde cod 7
poliester 6 cafe

到目前为止我正在研究正则表达式(使用 regex101),我计划之后在 R 查询中使用它。

似乎以下内容确实如此(根据描述)

pol.* 6 (?:(?=.*cod [37])|(?!.*cod [42])).*

注意它可能等同于

pol.* 6 (?!.*cod [42]).*

可以改进以减少回溯

pol[^ ]* 6 (?!.*cod [42]).*