Можно ли сопоставить одну позицию регулярного выражения, но не другую (например, позиционную XOR)?
Я стремлюсь создать несколько подвыражений в большем регулярном выражении, где каждое подвыражение соответствует чему-то в одном месте на входе или в другом месте, но не в обоих местах, предпочтительно используя одну и ту же именованную группу для "области интереса". Например, я хотел бы сопоставить единицы объема, выделенные курсивом ниже, и единицы валюты, выделенные жирным шрифтом.
- 3,23 долл. США / гал.
- 3,23доллара США в галлонах
- 4,50 CAD / галлон
- 1 галлон @ 3,23 доллара
- 10 галлонов@ 4,50 канадских долларов
Или в целом:
- вещиеще
- вещиXXX
гдевещи идругиевещи могут быть сложным набором подвыражений.
Кажется, что это может быть возможно с использованием некоторой комбинации
- групповой стек push/pop
- балансировочные группы
- смотреть по сторонам
но я не уверен, как поступить. Это сводится к чередованию (|
) или несколько проходов с разными выражениями (которые, я полагаю, равносильны одному и тому же)?
1 ответ
Вы, вероятно, должны использовать чередование, что-то вроде этого?
^(stuffmorestuff)XXX(yetmorestuff)|(stuff)XXX(morestuff)$
Но вы получите четыре группы захвата. Не уверен, как будет работать механизм регулярных выражений.NET, если вы используете одно и то же имя группы для нескольких групп.