Regex. Принцип эффективной работы - C#

Узнай цену своей работы

Формулировка задачи:

Вопрос кратко: что делать для эффективной работы Regex, если к одной и той же строке необходимо применить несколько паттернов поиска, которые взаимоисключают друг друга(то есть одна и та же конструкция не может удовлетворить сразу двум паттернам) Развёрнутый вопрос: Есть строка вида "какое-тоСловоЧисло,Число,Число-Число,Число-Число,Число" "World5,10,13-25,27,29-35,55" - как пример. то есть в начале строки находится слово, а дальше идёт перечисление через запятую либо чисел, либо комбинации на подобии "9-18", то есть диапазона. На выходе должна получиться коллекция строк вида World5 World10 World13 World14 World15 ... Естественно, самый очевидный алгоритм в голове появился - сначала выцепить первое слово, а потом двумя Match по разным паттернам выцепить сначала диапазоны, затем числа. Задание тестовое, но стало интересно: "А что, если строки довольно большие, да и паттерны тоже не такие простые, да и много их?" Как тогда действовать оптимальнее: каждый раз проделывать Match по интересующей строке, комбинировать Match и Replace, чтобы последующий Match работал уже с более короткой строкой (не убьёт ли создание новых строк выигрыш в поиске по более короткой строке), а может есть какие-то ещё варианты? И можно ли применить Replace и Match в один поход?

Решение задачи: «Regex. Принцип эффективной работы»

textual
Листинг программы
var m = Regex.Match(s, @"(?<word>[a-z, A-Z]+)(?:(?<firstInterval>\d+-\d+)|(?<firstNum>\d+))(?:,(?<interval>\d+-\d+)|,(?<num>\d+))*");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5