Можно ли сопоставить одну позицию регулярного выражения, но не другую (например, позиционную XOR)? - PullRequest
1 голос
/ 03 декабря 2011

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

  • 3,23 USD / гал .
  • USD 3,23 дюйма галлонов
  • 4,50 CAD / гал
  • 1 гал @ USD 3,23
  • 10 гал .@ $ 4,50 CAD

Или, в более общем смысле:

  • stuffmorestuff XXX moremorestuff
  • материал XXX еще материал

где материал и morestuff может быть сложным набором подвыражений.

Кажется, что это возможно при использовании некоторой комбинации

  • групповой стек push / pop
  • балансировка групп
  • осмотр

но я не знаю, как поступить.Это сводится к чередованиям (|) или множественным проходам с разными выражениями (что, я полагаю, составляет одно и то же)?

1 Ответ

1 голос
/ 03 декабря 2011

Вы, вероятно, должны использовать чередование, что-то вроде этого?

^(stuffmorestuff)XXX(yetmorestuff)|(stuff)XXX(morestuff)$

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

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