2012-10-18 14 views
5

Pasuję do powtarzającej się grupy, która zawiera mieszaninę grup opcjonalnych i nieobowiązkowych. Kiedy przechodzę do przechwytywania, kolekcje przechwytywania są zawsze zwinięte, tj. Nie wstawiają elementu zerowego dla niezrównanych elementów.C# regex przechwytuje

Czy istnieje sposób na zachowanie kolejności dopasowań w kolekcjach przechwytywania, tak aby każdy pominięty element opcjonalny został wstawiony jako pusty, zapewniając w ten sposób elementy kolekcji przechwytywania w grupach?

Aby wyjaśnić, powiedzmy, moja powtarzająca się (rodzica) grupa jest dopasowywana trzy razy, aw jednym z trzech dopasowań została pominięta opcjonalna grupa podrzędna, ale była obecna w dwóch pozostałych grupach, w efekcie otrzymuję kolekcję przechwytywania dla pominięty element, który jest o jeden element mniejszy niż inne kolekcje przechwytujące. Skąd mam wiedzieć, która z grup nadrzędnych pominęła element opcjonalny?

Przypuszczam, że byłoby możliwe użycie właściwości Index elementu kolekcji przechwytywania i sprawdzenie, czy mieści się ona w granicach grupy nadrzędnej, ale byłoby łatwiej, gdyby niezwiązane zwracały pozycję zerową w kolekcji przechwytywania . Czy istnieje sposób, aby to osiągnąć?

+0

można dostarczyć niektóre przykładowy kod do wykazania? – PinnyM

Odpowiedz

10

Zamiast (pattern)? użytku (pattern|) i powinieneś dostać to, co chcesz ...

+0

Niesamowite, to się udało! Wielkie dzięki! – pdm2011