/ / Contraindre le point de départ d'un match regex - c #, regex

Contraindre le point de départ d'un match regex - c #, regex

"J'analyse une longue chaîne et souhaite utiliser une expression régulière pour une partie de l'analyse.

Pour simplifier, disons que mon regex est <[a-z]*> et je "D tiens à courir quand j'arrive à la première <.

public int FindEnd(string longStr, int index) {
// longStr[index] == "<"

var match = regex.Match(longStr, index);
if (!match.Success || match.Index != index) {
throw new Exception("Mismatch");
} else {
return index + match.Length;
}
}

Je "voudrais contraindre la regex pour qu’elle ne recouvre pas toute la chaîne, mais ne cherche que des chaînes au point de départ indiqué - est-ce possible?" j'ai essayé ^<[a-z]*> mais cela n'a pas fonctionné - il n'accepterait rien (sauf si index pointe vers le début de la chaîne).

Note: je "m ne pas essayer analyser le HTML avec une expression régulière.

Réponses:

2 pour la réponse № 1

Je pense que tu cherches G<[a-z]*>


0 pour la réponse № 2

Il est dommage que Regex.Match (String, Int32) ne traite pas l’index comme "^".

Qu'en est-il de faire quelque chose comme ça:

re = new Regex ("^. {" + index.ToString () + "} <[a-z] *>");

... c'est-à-dire, contraindre le décalage du début de la correspondance dans la regex elle-même.

MISE À JOUR: Oh. Ça ne fait rien. La description de "G" par MSDN mentionne une "correspondance précédente", mais cela fonctionne exactement comme décrit ci-dessus. Solution bien meilleure que la mienne.