Je veux supprimer les espaces et les onglets de fin de mon code sans supprimer les lignes vides.
J'ai essayé:
\s+$
et:
([^\n]*)\s+\r\n
Mais tous ont également supprimé les lignes vides. Je suppose que \s
correspond aussi aux caractères de fin de ligne.
MISE À JOUR (2016):
Aujourd'hui, j'automatise ce nettoyage de code en utilisant le package TrailingSpaces de Sublime, avec le paramètre personnalisé/utilisateur:
"trailing_spaces_trim_on_save": true
Il met en surbrillance les espaces et les réduit automatiquement lors de la sauvegarde.
Essayez simplement de supprimer les espaces et les onglets suivants:
[ \t]+$
Pour supprimer les espaces blancs de fin tout en préservant les lignes ne contenant que des espaces, vous souhaitez que la regex ne supprime que les caractères de fin de chaîne after autres que des espaces. Vous devez donc d'abord vérifier si un caractère n'est pas un espace. Cela signifie que le caractère non-blanc sera inclus dans la correspondance. Vous devez donc l'inclure dans le remplacement.
Regex: ([^ \t\r\n])[ \t]+$
Remplacement: \1
ou $1
, selon l'EDI
La plate-forme n'est pas spécifiée, mais en C # ( .NET ) ce serait:
Expression régulière (suppose l'option multiligne - l'exemple ci-dessous l'utilise):
[ \t]+(\r?$)
Remplacement:
$1
Pour une explication de "\ r? $", Voir Options d’expression régulière, Mode multiligne (MSDN).
Cela supprimera tous les espaces de fin et toutes les tabulations de fin dans toutes les lignes:
string cleanedUpText = Regex.Replace(inputText,
@"[ \t]+(\r?$)", @"$1",
RegexOptions.Multiline);
Regex pour trouver des espaces finaux et finaux:
^[ \t]+|[ \t]+$
Si vous utilisez Visual Studio 2012 et versions ultérieures ( qui utilise des expressions régulières .Net ), vous pouvez supprimer les espaces blancs de fin sans supprimer les lignes vierges à l'aide de l'expression régulière suivante
Remplacer (?([^\r\n])\s)+(\r?\n)
Avec $1
Quelques explications
La raison pour laquelle vous avez besoin de cette expression plutôt compliquée est que la classe de caractères \s
correspond aux espaces, aux tabulations et aux caractères de nouvelle ligne, donc \s+
correspond à un groupe de lignes contenant uniquement des espaces. Cela n'aide pas d'ajouter une terminaison $
à cette expression rationnelle, car cela correspondra toujours à un groupe de lignes contenant uniquement des espaces et des caractères de nouvelle ligne.
Vous voudrez peut-être aussi savoir (comme je l’ai fait) exactement ce que signifie l'expression (?([^\r\n])\s)
. Ceci est un Alternation Construct , ce qui signifie effectivement une correspondance avec la classe de caractères d'espaces, s'il ne s'agit pas d'un retour à la ligne ou d'un saut de ligne.
Les constructions d’alternance ont normalement une partie vraie et fausse,
(?( expression ) yes | no )
mais dans ce cas la fausse partie n'est pas spécifiée.
En Java:
String str = " hello world ";
// prints "hello world"
System.out.println(str.replaceAll("^(\\s+)|(\\s+)$", ""));
[|\t] + $ avec un remplacement vide fonctionne.
\s + ($) avec un remplacement de 1 $ fonctionne également ... au moins dans vscode.
Pour supprimer les espaces de fin vides, utilisez ceci:
\n|^\s+\n
J'ai testé dans les éditeurs Atom et Xcode. J'espère qu'il en avait l'habitude.
Pour supprimer les espaces blancs en fin de texte tout en ignorant les lignes vides, j'utilise une recherche positive:
(?<=\S)\s+$
La recherche est le moyen idéal pour exclure le non-espace (\ S) du match.
Vous pouvez utiliser l'expression regex /^[ \t\v\f]+\S.*$/gm
pour supprimer les espaces de début de ligne, sans toucher aux lignes vierges ni aux espaces de fin:
const str = ' X \n\nY Y\n \n Z'.replace(/^[ \t\v\f]+(\S.*)$/gm, '$1');
console.log(str);
// output: 'X \n\nY Y\n \nZ'
Si vous souhaitez une prise en charge plus robuste bien qu'un peu plus lente, utilisez la fonction regex /^[ \t\v\f\xA0\uFEFF]+(\S.*)$/gm
, qui inclut NBSP et BOM, ce qui la rapproche du comportement \s
.
AJOUTÉE:
Ceci est plus simple et compatible avec le comportement \s
: /^(?=\s+).+(\S.*)$/gm
... mais je ne sais pas si cela fonctionnera dans les navigateurs plus anciens.
AVERTISSEMENT: Toute solution basée sur une expression rationnelle simple peut rompre les chaînes ES6 TL.