Comment puis-je avoir une expression régulière qui teste les espaces ou les tabulations mais pas les nouvelles lignes. J'ai essayé \s
mais j'ai découvert qu'il testait aussi les nouvelles lignes.
J'utilise C # / WPF mais cela ne devrait pas avoir d'importance.
\h
classe de caractères uniquement perl , mais cela montre qu'il existe de nombreux autres caractères d'espacement, au cas où vous auriez besoin de les ajouter à la liste ici.\t
?Essayez ce jeu de caractères:
Cela ne correspond qu'à un espace ou à un tabulateur.
la source
Comme @ Eiríkr Útlendi l'a noté, la solution acceptée ne considère que deux caractères d'espace blanc: la tabulation horizontale (U + 0009) et un espace de rupture (U + 0020). Il ne prend pas en compte les autres caractères d'espacement tels que les espaces insécables (qui se trouvent dans le texte que j'essaie de traiter). Une liste plus complète de caractères d'espaces blancs est incluse sur Wikipedia et également référencée dans la réponse Perl liée . Une solution C # simple qui tient compte de ces autres caractères peut être construite en utilisant la soustraction de classe de caractères
ou, y compris la solution d'Eiríkr Útlendi, vous obtenez
la source
Remarque: Pour ceux qui traitent du texte CJK (chinois, japonais et coréen), l'espace sur deux octets (Unicode
\u3000
) n'est pas inclus dans\s
les implémentations que j'ai essayées jusqu'à présent (Perl, .NET, PCRE, Python). Vous devrez soit normaliser vos chaînes en premier (par exemple en remplaçant tout\u3000
par\u0020
), soit utiliser un jeu de caractères qui inclut ce point de code en plus de tout autre espace blanc que vous ciblez, tel que[ \t\u3000]
.Si vous utilisez Perl ou PCRE, vous avez la possibilité d'utiliser le
\h
raccourci pour les espaces blancs horizontaux , qui semble inclure l'espace sur un octet, l'espace sur deux octets et la tabulation, entre autres. Pour plus de détails, reportez-vous au thread Match whitespace but not newlines (Perl) .Cependant, ce
\h
raccourci n'a pas été implémenté pour .NET et C #, comme j'ai pu le dire.la source
\h
(introduit dans Java 8) inclut\u3000
, mais\s
pas, sauf si vous définissez le mode UNICODE_CHARACTER_CLASS (introduit dans Java 7).Si vous souhaitez remplacer l' espace sous le code a fonctionné pour moi dans
C#
Regex.Replace(Line,"\\\s","");
Pour Tab
Regex.Replace(Line,"\\\s\\\s","");
la source