2017-10-20 3 views
2

Je souhaite insérer une chaîne entre les symboles, mais le symbole est continu. Like 'xx;; string ;;; chaîne ;; chaîne ;;;;'Comment insérer une chaîne dans un motif continu multiple dans Windows C#

je peux utiliser Regex r = new Regex(@";;", RegexOptions.Singleline);text = r.Replace(text, ";na;");, mais la sortie sera xx;na;string;na;;string;na;string;na;;na;

Ce que je veux est xx;na;string;na;na;string;na;string;na;na;na; Je veux tout l'espace vide entre « ;; » avoir na dedans.

Y at-il une fonction C# peut y parvenir?

+2

Ce '.Replace (" ;; ","; na; ")' ne donne pas le résultat attendu. –

+0

Exécutez deux fois votre regex – Piro

Répondre

2

Vous pouvez utiliser un ;(?=;) regex avec un Lookahead correspondre ; suivi avec un autre ; sans consommer la deuxième ;:

var str = "xx;;string;;;string;;string;;;;"; 
var res = Regex.Replace(str, ";(?=;)", ";na"); 
Console.WriteLine(res); // => xx;na;string;na;na;string;na;string;na;na;na; 

Voir la C# demo et la regex demo.

Le (?=;) est un positive lookahead que seuls vérifie s'il y a un ; immédiatement à gauche de l'emplacement actuel, mais ne correspond pas à la valeur de correspondance (il est donc pas supprimé) et ne se déplace pas l'indice de regex (de sorte que ce même ; peut être apparié à nouveau lors de l'itération suivante).

+1

Appréciez la réponse – sowrdking