Если не использовать Regex в C# (или Java, C++, и т.д.)

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

Предостережения:
Это работает только в рамках текущего решения.
Обновляет только ссылки в управляемом коде.
Он не будет обновлять буквенные строки, такие как «плохой код»
Он не будет обновлять ваши комментарии.

Это одна из моих любимых функций в VS2005 / 2008.

19
задан Community 23 May 2017 в 11:45
поделиться

7 ответов

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

Используйте для этого генераторы парсеров (или аналогичные технологии).

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

14
ответ дан 30 November 2019 в 04:54
поделиться

Необходимо учитывать два аспекта:

  • Возможности: является ли язык, который вы пытаетесь распознать, языком типа 3 (обычным)? Если да, то вы можете использовать регулярное выражение, если нет, вам нужен более мощный инструмент.

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

4
ответ дан 30 November 2019 в 04:54
поделиться

I'm a beginner when it comes to regex, but IMHO it is worthwhile to spend some time learning basic regex, you'll realise that many, many problems you've solved differently could (and maybe should) be solved using regex.

For a particular problem, try to find a solution at a site like regexlib, and see if you can understand the solution.

As indicated above, regex might not be sufficient to solve a specific problem, but browsing a browsing a site like regexlib will certainly tell you if regex is the right solution to your problem.

1
ответ дан 30 November 2019 в 04:54
поделиться

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

Взгляните на этот вопрос - который показывает элегантность регулярного выражения в отличие от аналогичного if ( ) построить ...

0
ответ дан 30 November 2019 в 04:54
поделиться

По крайней мере, я бы сказал, изучайте регулярные выражения, чтобы вы полностью понимали их и могли применять их в ситуациях, где они будут работать. С самого начала я бы использовал регулярные выражения для:

  • Идентификации частей строки.
  • Проверки соответствия строки определенному формату или конструкции.
  • Поиска подстрок, соответствующих определенному шаблону.
  • Преобразование строк, соответствующих определенному шаблону, в другую форму (поиск-замена, использование заглавных букв и т. Д.).

Регулярные выражения на теоретическом уровне формируют основы того, что такое конечный автомат - в информатике у вас есть Детерминированные конечные автоматы (DFA) и недетерминированные конечные автоматы (NFA). Вы можете использовать регулярные выражения для принудительной проверки входных данных - механизмы регулярных выражений просто интерпретируют или преобразуют шаблоны / строки регулярных выражений в фактические операции выполнения.

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

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

0
ответ дан 30 November 2019 в 04:54
поделиться

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

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

0
ответ дан 30 November 2019 в 04:54
поделиться

Основная проблема здесь - ремонтопригодность.

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

С другой стороны, следует учитывать, что поддержка кода, управляемого регулярными выражениями (написанного на любом языке), может быть кошмаром даже для того, кто действительно хорош в них. Так что, на мой взгляд, правильный подход здесь - использовать их только тогда, когда это неизбежно и когда код, использующий регулярное выражение, будет более читабельным, чем его вариант без регулярного выражения. И, конечно же, как уже указывалось, не используйте их для чего-то, для чего они не предназначены (например, xml). И никакой проверки адреса электронной почты тоже (одна из моих любимых мозолей: P)!

А если серьезно, разве не кажется неправильным, когда вы используете все эти substr для чего-то, что можно решить с помощью нескольких символов, похожих на линейный шум? Я знаю, что это помогло мне.

0
ответ дан 30 November 2019 в 04:54
поделиться