Regex + Supprimer tout le texte avant de le match
J'essaie de trouver un moyen de supprimer tout le texte dans une chaîne de caractères avant le match dans la Regex. Je suis ce codage en C#.
Par exemple, si la chaîne est "bonjour, test d'appariement", et le motif est "test", je voudrais que le résultat final sera "le test de la correspondance" (c'est à dire enlever tout ce qui est avant le test).
Toute pensée? Merci!
EDIT: j'ai probablement dû être un peu plus précis dans mon exemple, après la lecture de vos réponses (et merci pour eux). J'ai comme l'anticipation de la méthode, mais j'ai simplifié mon exemple. Pour rendre les choses encore plus difficiles, généralement les chaînes de ressembler à:
"bonjour, test d'appariement d'essai everythingAfter"
Donc, si j'utilise le modèle "test", il va attraper la première. Ce que mon but est de remplacer tout le texte après le deuxième match. C'est à dire: résultat de test everythingAfter".... Désolé à ce sujet.
- Je ne suis pas assez familier avec le C# pour écrire le code. Cependant, ne pas utiliser une RegEx, l'utilisation de base de la chaîne de méthodes. de recherche pour trouver l'occurrence, que l'utilisation de sous-chaîne de capturer tout ce qui est après.
- Pour les modèles que vous tentez de supprimer, sont-ils toujours des chaînes ou sont-ils parfois réel les expressions régulières? Dans le premier cas, l'utilisation
IndexOf
etSubstring
et d'éviter les pénalités que vous n'avez pas besoin. - Double Possible: Supprimer le texte de la corde jusqu'à ce qu'il atteigne un certain caractère
Vous devez vous connecter pour publier un commentaire.
*Mis à jour, à l'aide de matchcollection
"test\s"
a tout simplement consommétest
suivi d'un espace, puis, bien sûr, un lookbehind pour"test "
va réussir. Aussi, leSingleline
option n'a aucun effet, parce que la.
caractère de remplacement n'est pas utilisé dans la regex.test
et un mot qui le suit. Dans un commentaire à une autre réponse, l'OP a dit que c'est vraiment le dernier événement qu'il veut (vous devez mettre à jour de nouveau la question, @keynes), et le match devrait inclure tout ce qui suit, pas juste un mot.Vous pouvez utiliser anticipation positif pour correspondre à une chaîne de caractères, mais pas le capturer:
Si vous voulez capturer la substance avant la dernière occurrence du test:
Si vous voulez faire de sorte que c'est la première occurrence de l'essai, l'utilisation paresseux correspondance:
Pour une solution simple, il suffit de remplacer "début-de-ligne tout test" avec "test":
Depuis
*
est gourmand, il remplacera comme beaucoup que possible, c'est à direa test b test c
deviendratest c
. Pour remplacer aussi peu que possible, utiliser des*?
au lieu de*
.Si vous voulez éviter de dupliquer le mot de recherche, vous pouvez utiliser un Zéro-largeur d'anticipation positif affirmation:
test
. Il ne peut pas d'importance dans de nombreux cas, mais il peut aussi induire en erreur.