Конкатенация соответствия шаблонов Regex - PullRequest
5 голосов
/ 08 августа 2011

Можно ли объединить результаты сопоставления с образцом регулярных выражений, используя только синтаксис регулярных выражений?

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

Например:

Входная строка: 1234567890

Желаемая строка результата: 2389

Соответствие регулярному выражению: (? <= 1). + (? = 4) <strong> %% (? <= 7). + (? = 0) </p>

Где %% представляет некоторую форму синтаксиса конкатенации.Важно использовать начало и окончание синтаксиса, так как я знаю имена полей, но не значения полей.

Существует ли ключевое слово с такими функциями, как %% ?Есть ли более умный способ сделать это?Нужно ли изменять код, чтобы разрешить множественные входы регулярных выражений, автоматически объединяя?

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

2011-08-08 edit: Программа написана на C #, но изменение кода является серьезной задачей по сравнению с поиском решения на основе регулярных выражений.

1 Ответ

1 голос
/ 08 августа 2011

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

В C #:

string pattern = @"(?<=1)(.+)(?=4).+(?<=7)(.+)(?=0)";
Match m = Regex.Match(input, pattern);

string result = m.Groups[0] + m.Groups[1];

Такой же подход может быть применен и ко многим другим языкам.

Редактировать

Если вы не можете изменить код, тогда нет способа выполнить то, что вы хотите. Причина в том, что в C # сама строка регулярного выражения не имеет никакой власти над выводом. Чтобы изменить результат, вам нужно либо изменить вызываемый метод класса Regex, либо выполнить дополнительную работу после этого. Таким образом, вызываемый метод, скорее всего, просто возвращает либо объект Match, либо список подходящих объектов, ни один из которых не будет выполнять то, что вы хотите, независимо от входной строки регулярного выражения.

...