Je n'arrive pas à comprendre les captures + groupes dans Regex (.net).Regex: captures, groupes, confusion
Disons que j'ai la chaîne d'entrée suivante, où chaque lettre est en fait un espace réservé pour l'expression regex plus complexe (si simple exclusion de caractère ne fonctionnera pas):
CBDAEDBCEFBCD
Ou, de manière plus générale, voici un modèle de chaîne écrite dans « regex »:
(C|B|D)*A(E*)(D|B|C)*(E*)F(B|C|D)*
Il ne sera qu'un a et un F. je dois capturer en tant qu'individu « capture » (ou des allumettes ou des groupes) tous les cas de B, C, D (qui dans mon application sont des groupes plus complexes) qui se produisent af ter A et avant F. Je dois aussi A et F. Je ne ai pas besoin E. Et je ne ai pas besoin du C, B, D avant la A ou B, C, D après le F.
J'attends le résultat correct d'être:
Groups["start"] (1 capture) = A
Groups["content"] (3 captures)
Captures[0] = D
Captures[1] = B
Captures[2] = C
Groups["end"] (1 capture) = F
J'ai essayé quelques tentatives faibles, mais aucun d'entre eux travaillaient.
seulement "de manière incorrecte" capture le dernier C avant EF dans la chaîne de l'échantillon ci-dessus (ainsi que correctement start = A, fin = F)
(?<=(?<start>A)).+(?<content>B|C|D).+(?=(?<end>F))
Mêmes résultats que ci-dessus (juste ajouté un + après (? B | C | D))
(?<=(?<start>A)).+(?<content>B|C|D)+.+(?=(?<end>F))
est débarrassé de regarder autour de choses ... même résultat que ci-dessus
(?<start>A).+(?<content>B|C|D)+.+(?<end>F)
Et puis mon g Le cerveau du «rien pour rien» s'est mis en grève.
Alors, quelle est la bonne façon d'aborder ce sujet? Les look-arounds sont-ils vraiment nécessaires pour cela ou pas?
Merci!
Vraiment! Donc, les lookarounds ne sont pas nécessaires hein ... incroyable. – Jimmy
@Jimmy: Dans ce cas, oui, les correctifs ne sont pas nécessaires. Mais ils ont leurs utilisations. : P –