2010-03-07 5 views
0

Je suis nouveau à stackoverflow (mon premier message) et regex. Actuellement je travaille sur une application sale simple pour remplacer les propriétés de baseclass avec des champs injectés par ctor. (Cos je dois modifier environ 400 fichiers)Remplacer plusieurs lignes avec .net Regex

Il faut trouver ceci:

ClassName(WiredObjectRegistry registry) : base(registry) 
{ 

et le remplacer par:

ClassName(IDependency paramName, ISecondDependency secondParam, ...) 
{ 
    _fieldName = paramName; 
    ... 

donc je dois remplacer les deux anciennes lignes avec trois ou plus nouvelles lignes.

En fait, je pensais:

trouver ce ->

className + ctorParams + zéro ou plus espaces blancs + newline + zéro ou plus espaces blancs + {

remplacer par ->

classN amme + newCtorParams + newline + { mes missions sur le terrain

J'ai essayé regex pour .net

className + ctorParam + @"\w*" + "\r|\n" + @"\w*" + @"\{" 

qui ne remplace pas les "{" et les espaces blancs correctement

le remplacé le contenu du fichier ressemble à ceci:

 public CacheManager(ICallManager callManager, ITetraEventManager tetraEventManager, IConferenceManager conferenceManager, IAudioManager audioManager) 
{ 
     _callManager = callManager; 
_tetraEventManager = tetraEventManager; 
_conferenceManager = conferenceManager; 
_audioManager = audioManager; 
     { 

pouvez-vous s'il vous plaît aide moi avec ceci: - |

david

+0

Lorsque vous tapez votre question, il y a quelques informations sur l'écran qui vous indiquent comment formater votre question, y compris comment insérer des blocs de code. –

+1

À quoi ressemble le fichier d'origine (avant le remplacement)? –

+1

Nous devons voir le texte original réel (la partie pertinente, c'est-à-dire) et à quoi il devrait ressembler après le remplacement. Nous montrer des résultats incorrects et comment vous les avez obtenus ne nous aide pas. –

Répondre

0

Si vous traduisez

className + ctorParams + zero or more whitespaces + newline + zero or more whitespaces + { 

dans regex comme

className + ctorParam + @"\w*" + "\r|\n" + @"\w*" + @"\{" 

alors vous faites plusieurs erreurs.

D'abord, la classe de caractères pour les espaces est \s. \w signifie "caractère alphanumérique".

En second lieu, "\r|\n" se traduira par l'opérateur d'alternance | séparant l'ensemble regex en deux parties alternatives (= « correspondre soit à l'expression régulière avant la |ou l'expression rationnelle après la | »). Dans votre cas, vous n'avez pas besoin de ce bit puisque \s correspondra déjà aux espaces, onglets et nouvelles lignes. Si vous voulez une regex correspondant à une nouvelle ligne Unix, Mac ou DOS, utilisez \r?\n?. Mais, comme le montrent les commentaires, à moins que vous ne nous montriez ce que vous voulez vraiment faire, nous ne pouvons pas vous aider davantage.