2010-03-25 7 views

Répondre

5

Vous pouvez y parvenir en abusant lookahed:

Regex.Replace(str, @"(?<=^\w?(\s\w)*)\s(?=\w\s)", "_"); 

espaces qui sont Constate après une séquence d'espaces et des lettres simples, et avant une autre telle lettre. S'il vous plaît noter que cela ne fonctionnerait pas sur toutes les saveurs de Regex, mais .net le gère bien.

Une autre option utilise le MatchEvaluator:

Regex.Replace(str, @"^(\w)+", 
       match => match.Value.TrimEnd().Replace(' ', '_') + " "); 

Dans cette version est la regex facile, mais nous faisons un peu de post-traitement - la fonction supprime le dernier espace, et remplace tous les autres espaces par des underscores.

5
Regex.Replace(yourstring, "^x y z ", "x_y_z ") 

le feraient, bien sûr. Combien vous voulez généraliser dépend exactement de ce que "symboles suivis d'espaces" vous voulez remplacer (étant donné que vous ne voulez pas remplacer word1 et plus tard dans votre exemple de chaîne); par exemple, si vous voulez remplacer exactement trois identifiants à caractère unique (suivi par des espaces) au début de la chaîne, la généralisation correcte est:

Regex.Replace(yourstring, "^([a-z]) ([a-z]) ([a-z]) ", "$1_$2_$3 ") 

mais il est différent si vous voulez remplacer différents numéros d'identifiants , ou des identifiants de longueurs différentes, etc., etc. Dites-nous exactement ce que vous voulez remplacer (et où vous voulez arrêter de le remplacer) et nous pouvons être plus précis dans nos suggestions.

+1

Oui par x y z Je voulais dire une séquence de caractères simples, mais le nombre de ces caractères est variable. – MicMit

Questions connexes