202 votes

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

Dans le cas où la chaîne suivante doit être analysée.

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

Je veux remplacer le ~~? avec un carriage return

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

Comment cela peut-il être fait ?

289voto

Martin Points 15155

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

Find/Replace Dialog Use Regular expressions

Notez que pour Visual Studio 2010, cela ne fonctionne pas dans l'onglet Outils de productivité de Visual Studio Vous devez donc utiliser la boîte de dialogue Rechercher et remplacer complète (Ctrl+Shift+H ou Édition --> Rechercher et remplacer --> Remplacer dans les fichiers) et modifier le champ d'application pour qu'il devienne "Document actuel".

5 votes

Utiliser le bouton "Play" à droite du texte de recherche est également pratique

3 votes

Et si vous essayez de faire correspondre des caractères spéciaux comme les parenthèses, n'oubliez pas d'utiliser e.g. \) quand les expressions régulières sont activées...

2 votes

Le site ? doit être échappé dans Regex car il signifie que l'élément précédent est facultatif. Ainsi, le texte correct "Trouver quoi" est ~~\? avec le point d'interrogation échappé par une barre oblique inversée. La réponse que vous avez donnée fonctionne avec l'exemple de texte car elle trouvera avidement le deuxième tilde et le consommera, mais si un tilde simple existe également dans le texte, il sera remplacé par une nouvelle ligne.

28voto

Dean Points 111

Vous pouvez également essayer \x0d\x0a dans la case "Remplacer par" avec la case "Utiliser l'expression régulière" cochée pour obtenir le retour chariot + le saut de ligne en utilisant Visual Studio Find/Replace. En utilisant \n (saut de ligne) est identique à \x0a

0 votes

Trouvez : \r\n Remplacer : mon texte \r\n Utilisez des expressions régulières.

14voto

detunized Points 8559

Si vous avez activé l'option "Utiliser les expressions régulières", alors \n serait traduit. Mais n'oubliez pas que vous devrez modifier votre terme de recherche pour qu'il soit compatible avec les regexp. Dans votre cas, il devrait être échappé comme ceci "\~\~\ ?" (sans guillemets).

4 votes

Le caractère '~' n'a pas besoin d'être échappé dans Regex. C'est un caractère littéral. Ceci est incorrect.

12voto

Georges Dupéron Points 1078

Si vous voulez éviter de devoir échapper les caractères spéciaux dans votre chaîne de recherche et de remplacement lorsque vous utilisez des expressions régulières, procédez comme suit :

  1. Recherchez votre chaîne originale, et remplacez-la par "UniqueString42", avec des expressions régulières off .
  2. Recherchez "UniqueString42" et remplacez-le 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), avec des expressions régulières off .
  4. Recherchez "UniqueString42" et remplacez-le par la deuxième ligne de votre remplacement, avec des expressions régulières off .

Notez que même si vous souhaitez picher manuellement les correspondances pour la première recherche et le remplacement, vous pouvez utiliser sans risque "replace all" pour les trois dernières étapes.

Exemple

Par exemple, si vous voulez 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 off ).
  2. XOXOXOXO XOXOXOXO\nHUHUHUHU (regex sur ).
  3. XOXOXOXO public IFoo Foo { get { return this.MyFoo; } } (regex off ).
  4. HUHUHUHU public IFoo Bar { get { return this.MyBar; } } (regex off ).

0 votes

Si vous avez une solution pratique à ce problème qui évite d'avoir à échapper manuellement votre texte de recherche et de remplacement lors de sa transformation en expressions régulières, et de passer les 10 prochaines minutes à réparer le monstre créé de cette façon, je serais très heureux de l'entendre, car ma réponse n'est qu'un affreux hack. Mais comme vous pouvez le constater, toutes les autres réponses qui fonctionnent sur un Visual Studio vanille sans plug-ins supplémentaires nécessitent l'utilisation d'expressions régulières, et donc l'échappement de texte simple.

2 votes

Je ne voulais pas dire ça dans le mauvais sens. Je m'excuse d'avoir oublié de mettre un smiley :D Quant à la solution, je n'en ai pas qui implique VS. Mais j'ai trouvé que n'importe quel éditeur externe décent qui supporte les regex (notepad++ etc) fonctionne très bien.

2 votes

UltraEdit est le roi du remplacement par recherche - ici, vous recherchez les nouvelles lignes, les sauts de ligne ou autres en marquant simplement ces lignes et en lançant la recherche. - Comme pour le remplacement, il suffit d'entrer ^n pour \n , ^r pour \r et ^t pour \t - si seulement VS2010 pouvait faire de même :-)

8voto

Peter Macej Points 1885

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

enter image description here

0 votes

Ne semble pas fonctionner avec Visual Studio 2017 sans quelques étapes supplémentaires, c'est-à-dire avoir à cliquer sur le "trouver dans les fichiers" puis modifier que la portée des dialogues, le raccourci par défaut est f# interactive maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X