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

时间:2018-09-26 16:06:41

标签: regex regex-group

我遍历了正则表达式上的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查询中使用它。

1 个答案:

答案 0 :(得分:0)

似乎(根据描述)确实如此

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

请注意,这可能只是

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

可以进行改进以减少回溯

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