2016-04-28 9 views
1

У меня есть файл csv со многими строками.Regex: два условия

Я хочу получить линии с ;F; или ;A;, но не с ;REPORTING;.

  1. 123456 ;;;;; 75 ;;;; А; 18; -83; -7; 19 ;;
  2. 654321; 52 ;;;;;;;; F; 8; -3; 7; 489 ;;
  3. 123456 ;;;;;; 573 ;;;; 1858; -88963; -746; 1549 ;;
  4. 123456 ;; 523 ;;; ОТЧЕТНОСТЬ; fd3574 ;; A; 183001; -86583; -457; 19211 ;;

Я хочу, чтобы получить строку 1 и 2, но не выравнивают 3 и 4 ...

Я пробовал:

;(?!REPORTING);.*;(F|A); 

, но не успех ...

Любой идея?

+0

В зависимости от языка, '' find' или в' операции будет дешевле, чем регулярные выражения. – RPGillespie

ответ

1

Это будет работать

^(?=.*;[AF];)(?!.*;REPORTING;) 

Regex Demo

+1

Использование lookarounds стоит дорого! '^ (?!. *; REPORTING;). *; [AF];. *' Возвращает то же самое со 100 наименьшими шагами – Aaron

+0

@ Аарон - это хороший способ – rock321987

+0

Ну, на самом деле, я не знаю, где я сделал 100 шагов из. Это все еще немного более эффективно, но только незначительно. – Aaron

Смежные вопросы