Rechercher et remplacer - Ajouter un retour chariot OU une nouvelle ligne

183

Dans le cas de la chaîne suivante à analyser.

ford mustang,10,blue~~?bugatti veyron,13,black

Je veux remplacer le ~~?par uncarriage return

Remplacer par \najoute simplement la chaîne"\n"

Comment cela peut-il être fait?

Mantisimo
la source

Réponses:

272

Assurez-vous que "Utiliser: Expressions régulières" est sélectionné dans la boîte de dialogue Rechercher et remplacer:

Boîte de dialogue Rechercher / Remplacer Utiliser des expressions régulières

Notez que pour Visual Studio 2010, cela ne fonctionne pas dans l' extension «Recherche rapide» de Visual Studio Productivity Power Tools (à partir de la mise à jour de juillet 2011); à la place, vous devrez utiliser la boîte de dialogue Rechercher et remplacer complète (utilisez Ctrl + Maj + H, ou Édition -> Rechercher et remplacer -> Remplacer dans les fichiers), et changer la portée en "Document actuel".

Martin
la source
5
l'utilisation du bouton "Lecture" à droite du texte de recherche est également pratique
Cel
3
et si vous essayez de faire correspondre des caractères spéciaux tels que des parenthèses, n'oubliez pas de les utiliser, par exemple \)lorsque les expressions régulières sont
activées
2
Le ?caractère doit être échappé dans Regex car cela signifie que l'élément précédent est facultatif. Ainsi, le texte correct "Find what" est ~~\?, avec le point d'interrogation échappé par une barre oblique inverse. La réponse que vous avez donnée fonctionne sur l'exemple de texte car il trouvera avidement le deuxième tilde et le consommera, mais si un seul tilde existe également n'importe où dans le texte, il sera également incorrectement remplacé par une nouvelle ligne.
ErikE
Si Productivity Power Tools est installé, vous pouvez toujours faire ctrl + shit + h, puis ctrl + h pour ouvrir la fenêtre native de recherche / remplacement de Visual Studio.
Neb
Il convient de noter que si "Utiliser les expressions régulières" est sélectionné, on peut également utiliser "\ n" pour trouver (et remplacer) les nouvelles lignes.
Jacob Lockard
28

Vous pouvez également essayer \x0d\x0adans la case «Remplacer par» avec la case «Utiliser une expression régulière» cochée pour obtenir un retour chariot + un saut de ligne à l'aide de Visual Studio Rechercher / Remplacer. Utiliser \n( saut de ligne) équivaut à\x0a

doyen
la source
13

Si vous définissez le drapeau "Utiliser des expressions régulières", \ n sera traduit. Mais gardez à l'esprit que vous devrez modifier votre terme de recherche pour qu'il soit compatible avec les expressions rationnelles. Dans votre cas, il devrait être échappé comme ceci "\ ~ \ ~ \?" (pas de guillemets).

désaccordé
la source
3
'~' n'a pas besoin d'être échappé dans Regex. C'est un caractère littéral. Ceci est une erreur.
ErikE
12

Si vous souhaitez éviter d'avoir à échapper les caractères spéciaux de votre chaîne de recherche et de remplacement lors de l'utilisation d'expressions régulières, procédez comme suit:

  1. Recherchez votre chaîne d' origine, et le remplacer par « UniqueString42 », avec des expressions régulières au large .
  2. Chercher « UniqueString42 » et le remplacer par « UniqueString42 \ nUniqueString1337 », avec des expressions régulières sur
  3. Recherchez "UniqueString42" et remplacez-le par la première ligne de votre remplacement (souvent votre chaîne d'origine), en désactivant les expressions régulières .
  4. Chercher « UniqueString42 » et le remplacer par la deuxième ligne de votre remplacement, avec des expressions régulières au large .

Notez que même si vous souhaitez sélectionner manuellement les correspondances pour la première recherche et remplacer, vous pouvez utiliser en toute sécurité «remplacer tout» pour les trois dernières étapes.

Exemple

Par exemple, si vous souhaitez remplacer ceci:

public IFoo SomeField { get { return this.SomeField; } }

avec ça:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Vous feriez les substitutions suivantes:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(regex désactivé ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex sur ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(regex désactivé ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(regex désactivé ).
Suzanne Dupéron
la source
@Alex Si vous avez une solution pratique à ce problème qui évite d'avoir à échapper manuellement à votre recherche et à remplacer le texte lors de sa transformation en expressions régulières, et de passer les 10 prochaines minutes à réparer le monstre ainsi créé, je serais très heureux d'entendre il, puisque ma réponse est juste un hack laid. Mais comme vous pouvez le voir, toutes les autres réponses qui fonctionnent sur un Visual Studio vanilla sans plug-ins supplémentaires nécessitent l'utilisation d'expressions régulières, et donc d'échapper du texte simple.
Suzanne Dupéron
2
Je ne voulais pas dire cela d'une mauvaise manière. Mes excuses, j'ai oublié de mettre un smiley: D Quant à une solution, non je n'en ai pas une qui implique VS. Mais j'ai trouvé que tout éditeur externe décent qui prend en charge regex (notepad ++, etc.) fonctionne très bien.
Alex
2
UltraEdit est le roi du remplacement de la recherche - ici, vous recherchez des nouvelles lignes, des sauts de ligne ou autre, simplement en marquant ces lignes et en commençant la recherche. - En ce qui concerne le remplacement, entrez simplement ^ n pour \ n, ^ r pour \ r et ^ t pour \ t - si seulement VS2010 ferait la même chose :-)
Miros
Vous pouvez toujours visiter regex101.com pour voir si votre chaîne de recherche va correspondre à des caractères littéraux ou être interprétée comme des caractères de contrôle Regex.
ErikE
7

Vous pouvez utiliser la recherche et le remplacement multilignes dans la macro Visual Studio qui fournit une interface graphique agréable pour la tâche.

entrez la description de l'image ici

Peter Macej
la source
Ne semble pas fonctionner avec Visual Studio 2017 sans quelques étapes supplémentaires, c'est-à-dire qu'il faut cliquer sur "rechercher dans les fichiers" puis modifier la portée des boîtes de dialogue, le raccourci par défaut est f # interactif maintenant.
Mark Schultheiss