Отрицательное регулярное выражение для строки

Как я могу получить отрицательный результат этого регулярного выражения?

8000[0-9]{12}|4000[0-9]{12}|2000[0-9]{11}

Я просто хочу изменить регулярное выражение, чтобы получить отрицательный результат.

Пример с этим образцом:

200045646587982  
8000046678465132  
8000078526654112  
4000846464256741  
4000875465123111  
8318548479844423  
8020489065458054  

Если я выполняю текущее регулярное выражение, я получаю такой результат:

200045646587982  
8000046678465132  
8000078526654112  
4000846464256741  
4000875465123111  

Я хочу, чтобы регулярное выражение возвращало обратное значение:

8318548479844423  
8020489065458054  

person Dan    schedule 08.11.2012    source источник
comment
Под отрицательным вы подразумеваете обратное?   -  person Quintin Robinson    schedule 08.11.2012
comment
Итак, вы хотите соответствовать, когда этот шаблон не соответствует?   -  person Martin Ender    schedule 08.11.2012


Ответы (3)


это зависит от того, какие инструменты вы можете использовать.

Я бы взял свой ввод и использовал «положительное» регулярное выражение, чтобы заменить совпадающие строки пустыми строками, а затем избавиться от них.

Например, если вы вводите файл и работаете в среде Unix:

кошка input.txt | sed s/my-positive-regexp//g

заменит совпадающие строки пустыми строками.

person Uluaiv    schedule 15.11.2012

Посмотрите мой ответ здесь: https://stackoverflow.com/a/12139118/1548853

Даже несмотря на то, что ответ не полностью адресован вам, применяется тот же принцип.

person Firas Dib    schedule 08.11.2012

Я думаю, что это проще, чем инвертирование/отрицание шаблона.

    if (!Regex.IsMatch("input", "pattern")) 
    {
    }
person paparazzo    schedule 08.11.2012
comment
Я знаю, как это сделать на С#, и это легко, но мне нужно изменить выражение регулярного выражения, чтобы получить результат, обратный моему текущему. - person Dan; 08.11.2012
comment
Нет, не нужно. Вы можете просто прочитать данные построчно. - person paparazzo; 09.11.2012