2009-12-07 5 views
2

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

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

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

Спасибо,

Tim

+1

Есть ли возможность изменения частоты вращения (15)? Если да, планируете ли вы настроить переменную? –

+0

не требуется сложное регулярное выражение. pseudocode: если vat в строке и не pri * vat * e в строке, сделайте что-нибудь. – ghostdog74

ответ

1

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

Для ванны

~ (ИРП) чан ~ (е) (Это также исключает '' Vate так просто снять ~ (е) при желании)

А для 15

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

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

+0

Спасибо, это именно то, что я искал !! – tt83

5
/\bVAT\b/ 

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

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

+2

+1 Я бы связал мультфильм xkcd, но это стало настолько cliché ... –

1

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

Вот обзор:

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

Кроме того, Джефф Этвуд имеет запись в блоге об этом, что может быть какой-то малой величины:

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

0

Не могли бы вы найти «НДС» (space vat space)?

+0

К сожалению, это не сработает в этом случае, поскольку я пытаюсь выполнить поиск определений переменных, которые могут быть, например, «vat_rate». – tt83