Expression régulière: trouver des espaces (tabulations / espace) mais pas de nouvelles lignes


96

Comment puis-je avoir une expression régulière qui teste les espaces ou les tabulations mais pas les nouvelles lignes. J'ai essayé \smais j'ai découvert qu'il testait aussi les nouvelles lignes.

J'utilise C # / WPF mais cela ne devrait pas avoir d'importance.

Réponses:


189

Utilisez des classes de caractères: [ \t]


1
Spot sur mon problème. Voir aussi stackoverflow.com/a/25956935/292060 pour une \hclasse 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.
goodeye

3
pourquoi devrait-il y avoir un espace avant \t?
Ooker

4
@Ooker Pour capturer un espace littéral
codemonkee

Cela ne correspondra pas aux autres types d'espaces, comme d'autres réponses l'ont mentionné.
Gus

1
Pourquoi un espace avant \ t?
Catbuilts

35

Essayez ce jeu de caractères:

[ \t]

Cela ne correspond qu'à un espace ou à un tabulateur.


14

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

[\s-[\r\n]]

ou, y compris la solution d'Eiríkr Útlendi, vous obtenez

[\s\u3000-[\r\n]]

3

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 \sles 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 \u3000par \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 \hraccourci 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 \hraccourci n'a pas été implémenté pour .NET et C #, comme j'ai pu le dire.


1
Bon point. Java \h(introduit dans Java 8) inclut \u3000, mais \spas, sauf si vous définissez le mode UNICODE_CHARACTER_CLASS (introduit dans Java 7).
Alan Moore

0

Si vous souhaitez remplacer l' espace sous le code a fonctionné pour moi dansC#

Regex.Replace(Line,"\\\s","");

Pour Tab

Regex.Replace(Line,"\\\s\\\s","");

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.