Использование Lookaround или игнорирование отсутствия захвата в совпадении с регулярным выражением

Рассмотрим следующую строку: ABC. Я хотел бы с помощью регулярного выражения захватить следующие группы:

Group1: AC
Group2: B

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

Я попробовал обе группы без захвата и огляделся.

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

(?<Group1>a(?:(?<Group2>b))c)

Group1: ABC # Неправильно, поскольку B участвует в матче. Группа 2: B

При поиске Group2 не используется, и регулярное выражение после просмотра вперед должно снова совпадать с содержимым Group2, которое включает его как часть Group1.

(?<Group1>a(?=(?<Group2>b))bc)

Group1: ABC # Неправильно, поскольку B участвует в матче. Группа 2: B

Как я могу игнорировать "B" в матче Group1?

Любая помощь в решении этой проблемы приветствуется.

Спасибо, Баладжи


person Balaji    schedule 02.08.2011    source источник


Ответы (1)


Вы не можете. Механизмы регулярных выражений не могут объединять нелинейные подматчи в одно совпадение. Любое совпадение должно быть последовательностью символов исходного текста.

person Tim Pietzcker    schedule 02.08.2011
comment
Спасибо. Можно ли было игнорировать группу, не захватывающую пленку, из финального матча? - person Balaji; 02.08.2011
comment
Нет. Группа участвует в матче. Неважно, фиксирует он что-либо или нет. - person Tim Pietzcker; 02.08.2011