Mam wyrażenie regularne. Zawiera wymaganą nazwaną grupę przechwytywania i opcjonalne nazwane grupy przechwytywania. Przechwytuje pojedyncze dopasowania i analizuje sekcje w nazwanych grupach, których potrzebuję.Powtarzalne, złożone wyrażenie regularne, z kropką "." rozdzielane separatory
Z wyjątkiem tego, teraz potrzebuję go powtórzyć.
Zasadniczo moje wyrażenie regularne reprezentuje pojedynczą jednostkę atomową w ciągu (potencjalnie) znacznie dłuższym. Zamiast dopasowywać dokładnie moje wyrażenie regularne, ciąg docelowy zwykle zawiera powtarzające się instancje wyrażenia regularnego, oddzielone kropką "." postać.
Na przykład, jeżeli jest to, co mój wyrażenie regularne oddaje: <some match>
Rzeczywiste ciąg mógłby wyglądać każdy z nich:
<some match>
<some match>.<some other match>
<some match>.<some other match>.<yet another match>
Jaki jest najprostszy sposób modyfikowania oryginalnego wyrażenia regularnego, aby uwzględnić powtarzające się wzorce, ignorując kropki?
Nie jestem pewien, czy rzeczywiście jest potrzebny, ale tutaj jest wyrażenie regularne, którego używam do przechwytywania poszczególnych segmentów. Jeszcze raz, chciałbym to ulepszyć, aby uwzględnić opcjonalne dodatkowe segmenty. Chciałbym, aby każdy segment był wyświetlany jako kolejny "mecz" w zestawie wyników;
^(?<member>[A-Za-z_][A-Za-z0-9_]*)(?:\[(?<index>[0-9]+)\])?(?:\[(?<index2>[0-9]+)\])?(?:\[(?<index3>[0-9]+)\])?$
Jest przeznaczony do analizy ścieżki klasy, z maksymalnie trzema opcjonalnymi akcesoriami indeksu. ("member.sub_member[0].sub_sub_member[0][1][2]
")
Podejrzewam, że odpowiedź wymaga spojrzenia z wyprzedzeniem lub spojrzenia w tył, co do którego nie jestem do końca zaznajomiony.
Obecnie używam String.Split do oddzielania segmentów ciągów. Ale myślę, że jeśli wzmocnienie do regex jest dość proste, pomijam dodatkowy krok dzielenia i ponownie używam wyrażenia regularnego jako mechanizmu sprawdzania poprawności.
EDIT:
Jako dodatkowy klucz w tryby, chciałbym, aby uniemożliwić jakąkolwiek kropki „” znak od początku lub końca ciągu. Powinny one istnieć tylko jako separatory między segmentami ścieżki.
Uproszczonym podejściem byłoby podzielenie łańcucha na' .', a następnie uruchomienie regex na każdym z nich. –
Obecnie to robię. Pomyślałem, że jeśli poprawka do zwykłego expresison jest wystarczająco prosta, byłbym w stanie zrezygnować z string.Split i dodatkowo być w stanie zweryfikować ciąg przed jego analizą. – BTownTKD
Innymi słowy, szukasz spójnych dopasowań oddzielonych kropką od początku do końca łańcucha i nic więcej, nieprawdaż? –