Использовать или не использовать регулярные выражения?
Я только что задал этот вопрос об использовании регулярного выражения для разрешения чисел от -90,0 до +90,0. Я получил несколько ответов о том, как реализовать регулярное выражение, но в большинстве ответов также упоминалось, что это было бы лучше обрабатывать без использования регулярного выражения или использования регулярного выражения, что было бы излишним. Итак, как вы решаете, когда использовать регулярное выражение, а когда не использовать регулярное выражение. Есть ли контрольный список, за которым вы можете следить?
5 ответов
Регулярные выражения являются инструментом обработки текста для символьных тестов. Более формально, регулярные выражения хороши в обработке регулярных языков и плохо почти во всем остальном.
На практике это означает, что регулярные выражения плохо подходят для задач, которые требуют раскрытия смысла (семантики) в тексте, выходящем за пределы уровня символов. Это потребует полноценного парсера.
В вашем конкретном случае: распознавание числа в тексте - это упражнение, с которым хорошо справляются регулярные выражения (десятичные числа можно описать тривиально, используя обычный язык). Это работает на уровне персонажа.
Но выполнение более сложных вещей с числом, которое требует знания его числового значения (то есть его семантики), требует интерпретации. Регулярные выражения плохо в этом. Так что найти номер в тексте легко. Трудно найти в тексте число, которое больше 11, но меньше 1004 (или делится на 3): для этого необходимо распознать значение числа.
Я бы сказал, что выражения регулярных выражений наиболее эффективны в строках. Для других типов данных манипуляции с этим типом данных, как правило, будут более интуитивными и обеспечат лучшие результаты.
Например, если вы знаете, что имеете дело с DateTime, то вы можете использовать методы Parse и TryParse для различных форматов, и они обычно будут более надежными, чем ваши собственные выражения регулярных выражений.
В вашем примере вы имеете дело с числами, поэтому разбирайтесь с ними соответственно.
Regex очень мощный, но это не самый простой код для чтения и отладки. Когда под рукой другое надежное решение, вы, вероятно, должны пойти на это.
Не имея смысла быть круглым или тупым, вы должны использовать регулярные выражения, когда у вас есть строка, которая содержит информацию, структурированную на обычном языке, и вы хотите превратить эту строку в объектную модель.
Основной вариант использования для RegEx:-
Вам нужны "Пары значений ключа" - и ключ, и значения встроены в другой зашумленный текст - иначе получить доступ или изолировать невозможно.
Вам нужно автоматизировать извлечение этих значений, циклически перебирая несколько документов.
Число и комбинация пар ключ-значение могут быть обнаружены в процессе анализа текста.
Ответ прост:
Если вы можете решить вашу проблему без регулярных выражений (просто с помощью строковых функций), вы не используете регулярные выражения. Как было сказано в одной книге, которую я прочитал: регулярные выражения - это насилие над компьютером.
Если сложно использовать строковые функции языка, используйте регулярные выражения.