Использовать или не использовать регулярные выражения?

Я просто спросил об этом question об использовании регулярного выражения, чтобы разрешать числа от -90.0 до +90.0. Я получил несколько ответов о том, как реализовать регулярное выражение, но в большинстве ответов также упоминалось, что лучше обрабатывать, не используя регулярное выражение или использовать регулярное выражение, будет излишним. Итак, как вы решаете, когда использовать регулярное выражение и когда не использовать регулярное выражение. Есть ли список проверок, которым вы можете следовать?

Ответ 1

Регулярные выражения - это инструмент обработки текста для тестов на основе символов. Более формально регулярные выражения хороши при работе с обычными языками и плохими почти во всем.

На практике это означает, что регулярные выражения не очень подходят для задач, требующих обнаружения смысла (семантики) в тексте, выходящего за пределы уровня персонажа. Для этого потребуется полноразмерный парсер.

В вашем конкретном случае: распознавание числа в тексте - упражнение, в котором правильные выражения хороши (десятичные числа могут быть тривиально описаны с использованием обычного языка). Это работает на уровне персонажа.

Но использование более продвинутых материалов с числом, требующим знания его численного значения (т.е. его семантики), требует интерпретации. Регулярные выражения плохо в этом. Поэтому найти номер в тексте легко. Найти число в тексте, которое больше 11, но меньше 1004 (или делится на 3), сложно: требуется распознавание значения числа.

Ответ 2

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

Например, если вы знаете, что имеете дело с DateTime, то вы можете использовать методы Parse и TryParse для разных форматов, и обычно они будут более надежными, чем ваши собственные выражения регулярных выражений.

В вашем примере вы имеете дело с числами, поэтому обращайтесь с ними соответственно.

Regex очень мощный, но это не самый простой код для чтения и отладки. Когда еще одно надежное решение под рукой, вы должны, вероятно, пойти на это.

Ответ 3

Без значения, чтобы быть круглым или тупым, вы должны использовать регулярные выражения, когда у вас есть строка, которая содержит информацию, структурированную в регулярном языке, и вы хотите превратить эту строку в объектную модель.

Ответ 4

Ответ прост:

Если вы можете решить свою проблему без регулярных выражений (просто с помощью строковых функций), вы не будете использовать регулярные выражения. Как было сказано в одной книге, я читал: регулярные выражения - это насилие над компьютером.

Если это сложно использовать языковые строковые функции, используйте регулярные выражения.

Ответ 5

Основной пример использования для RegEx: -

  • Вам нужны "пары ключевых значений". Оба ключа и значения встроены в другой шумный текст - возможно, доступ к нему или изолированный в противном случае.

  • Вам необходимо автоматизировать извлечение этих значений, перейдя по нескольким документам.

  • Число и комбинация пар ключей могут быть обнаружены при прогрессе в анализе текста.