Существуют ли конкретные случаи, когда манипулирование собственным текстом более желательно, чем регулярное выражение?

Существуют ли конкретные случаи, когда манипулирование собственным текстом более желательно, чем регулярное выражение? В частности .net?

Note: Regex, кажется, очень эмоциональный субъект, поэтому я с осторожностью задаю такой вопрос.This question is not inviting personal/profession opinions on regexтолько конкретные ситуации, когда решение, включая его использование, не так хорошо, как собственные команды языка (включая те, которые имеют базовый код, использующий регулярное выражение) и почему.

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

Извиняюсь, если это дубликат, я искал ТАК для подобного вопроса.

Ответы на вопрос(8)

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

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

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

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

Да. Пример

char* basename (const char* path)
{
  char* p = strrchr(path, '/');
  return (p != NULL) ? (p+1) : path;
}

кода.

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

В настройке объекта и разборе выражения есть некоторые накладные расходы. Для упрощения работы со строками вы можете повысить производительность с помощью простых строковых методов.

Пример
Получение имени файла из пути к файлу (да, я знаю, что для этого следует использовать класс Path, это всего лишь пример ...)

string name = Regex.Match(path, @"([^\\]+)$").Groups[0].Value;

@ V

string name = path.Substring(path.LastIndexOf('\\') + 1);

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

Решение Вопроса

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

Личное эмпирическое правило: если сложно или сравнительно долго делать это «вручную» и прирост производительности незначителен, не делайте этого. Остальное делаю.

Не примеры:

Трещин простой поиск и замена длинный текст Цикл существующие нативные функции (например, в PHP,strrchr, ucwords ...)

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

Дай немного текста:

value1, value2, value3

Вы можете легко разобрать строку:

var values = myString.Split(',');

Я уверен, что есть лучший способ, но с регулярными выражениями вам нужно сделать что-то вроде:

var match = Regex.Match(myString, "^([^,]*),([^,]*),([^,]*)$");
var value1 = match.Group[1];
...
 Svante24 июн. 2009 г., 18:12
Следует отметить, что функции "split" часто разделяются на регулярные выражения.
 John Pirie24 июн. 2009 г., 15:01
+ 1. Кроме того, записи фиксированной длины поля

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

Я предпочитаю манипулирование собственным текстом над регулярным выражением в любое время, когда другим людям будет легче следить за манипулированием собственным текстом. Что довольно часто, так как многие люди вокруг меня не очень хорошо знакомы с регулярным выражением. Если вы не работаете с чем-то, что связано с синтаксическим анализом (через регулярные выражения), они не должны быть такими!

Регулярные выражения обычно медленнее, менее читаемы и сложнее в отладке, чем собственные операции со строками.

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

Ваш ответ на вопрос