Я просмотрел разные страницы 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 3
, cod 7
, либо те, которые не упоминают cod 4
или cod 2
.
Многие регулярные выражения, которые я пробовал на regex101.com, терпят неудачу либо потому, что они извлекают упоминание о cod 4
или cod 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]).*