"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 № 1Je 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.