Когда использовать Regex по сравнению с Созданным в Строковых Методах?

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

Я добавил новую версию модели, добавил некоторые отношения к существующим моделям и сам определил методы add * Object в заголовочном файле. Когда я попытался позвонить им, я получил сообщение об ошибке выше.

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

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

6
задан colithium 30 June 2009 в 09:02
поделиться

5 ответов

Я думаю, что использовать Regex в качестве универсального решения, когда возможен поиск / замена на основе строк, - неправильное впечатление.

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

Я никогда не видел статистических данных о производительности, предполагающих, что поиск на основе Regex выполняется быстрее или более производительный, чем индексирование строк. Кроме того, механизмы Regex различаются по своим возможностям выполнения.

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

9
ответ дан 8 December 2019 в 17:26
поделиться

Мне просто нравятся регулярные выражения, но если есть простая функция типа xxx-> replace ("foo", "bar"), кажется глупым использовать инструмент, такой как регулярное выражение, когда простая отвертка подойдет.

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

Кроме того, меня постоянно улавливают «незначительные» различия в реализации - например, Pythons подразумевают "^ ... $" "во встроенной функции match (). В то время я был в дороге без доступа к Интернету и в конце концов купил еще один экземпляр книги Лутца, чтобы узнать, что происходит!

2
ответ дан 8 December 2019 в 17:26
поделиться

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

Но, как и в случае с чем-либо субъективным, если вас беспокоит время производительности различных методов.

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

0
ответ дан 8 December 2019 в 17:26
поделиться

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

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

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

1
ответ дан 8 December 2019 в 17:26
поделиться

Regex.Replace () намного дороже, чем метод String.Replace (). По возможности используйте String.Replace (), а при необходимости - Regex.

2
ответ дан 8 December 2019 в 17:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: