вопрос отрицания регулярного выражения - PullRequest
2 голосов
/ 08 декабря 2009

Кто-нибудь знает, как кодировать регулярное выражение (для использования с каким-либо инструментом, похожим на grep), которое будет искать слово «vat», но исключать слово «pri vat e». Я взял на себя проект, в котором есть сотни ссылок на НДС (некоторые жестко запрограммированы, некоторые нет), и поскольку ставка НДС в Великобритании меняется 1 января, мне нужно обновить исходные файлы проекта с правильной ставкой. В тот момент, когда я выполняю глобальный поиск слова 'vat' в Visual Studio, он также возвращает строки, которые содержат частное определение void.

В дополнение к этому мне нужно искать «15» (текущая ставка НДС), но я бы хотел исключить любые строки, которые имеют любое число до или после «15». Например, 0,15 или 15 или 15% будет истинным, 015 или 150 или 15a будет ложным.

Как вы можете себе представить, это не тривиальная задача, которую нужно выполнять вручную, поэтому любая помощь будет высоко ценится.

Спасибо

Тим

Ответы [ 4 ]

5 голосов
/ 08 декабря 2009
/\bVAT\b/

/\b(0\.)?15%?\b/

Последнее допускает такие вещи, как «0,15%», но их должно быть достаточно, чтобы отфильтровать позже. Regex не лучший инструмент для этого, а как насчет выражений типа «10 + 5»? Но если он отвечает вашим потребностям, его по крайней мере легко использовать!

1 голос
/ 08 декабря 2009

Используя Visual Studio (как я читал ранее, вы можете использовать):

Для чана

~ (pri) vat ~ (e) (Это также исключит 'vate', поэтому просто снимите ~ (e) при желании)

А для 15

[^ 0-9a-г] 15 [^ 0-9a-г]

Синтаксис регулярного выражения, используемый VS для Find and Replace, не похож на ваше стандартное регулярное выражение, не уверен, почему MS пошел по этому пути, но они это сделали.

1 голос
/ 08 декабря 2009

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

Вот обзор:

http://www.regular -expressions.info / lookaround.html

Кроме того, у Джеффа Этвуда есть запись в блоге, которая может иметь небольшую ценность:

http://www.codinghorror.com/blog/archives/000425.html

0 голосов
/ 08 декабря 2009

Не могли бы вы найти "НДС" ( пробел НДС пробел )?

...