Espressione regolare: trova gli spazi (tabulazioni / spazio) ma non le nuove righe


96

Come posso avere un'espressione regolare che verifica spazi o tabulazioni ma non le nuove righe. Ho provato \sma ho scoperto che prova anche per i newline.

Uso C # / WPF ma non dovrebbe importare.

Risposte:


189

Usa classi di personaggi: [ \t]


1
Spot on per il mio problema. Vedi anche stackoverflow.com/a/25956935/292060 per una \hclasse di caratteri solo perl , ma mostra che ci sono molti altri caratteri di spazio bianco, nel caso in cui sia necessario aggiungerli all'elenco qui.
goodeye

3
perché dovrebbe esserci uno spazio prima \t?
Ooker

4
@Ooker Per catturare uno spazio letterale
codemonkee

Questo non corrisponderà ad altri tipi di spazi, come hanno menzionato altre risposte.
Gus

1
Perché uno spazio prima di \ t?
Catbuilt

35

Prova questo set di caratteri:

[ \t]

Questo corrisponde solo a uno spazio o a un tabulatore.


14

Come ha notato @ Eiríkr Útlendi, la soluzione accettata considera solo due spazi vuoti: la tabulazione orizzontale (U + 0009) e uno spazio di interruzione (U + 0020). Non considera altri caratteri di spazio bianco come gli spazi unificatori (che si trovano nel testo che sto cercando di trattare). Un elenco di caratteri di spazi bianchi più completo è incluso su Wikipedia e anche a cui si fa riferimento nella risposta Perl collegata . Una semplice soluzione C # che tiene conto di questi altri caratteri può essere creata usando la sottrazione della classe di caratteri

[\s-[\r\n]]

oppure, inclusa la soluzione di Eiríkr Útlendi, ottieni

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

3

Nota: per coloro che si occupano di testo CJK (cinese, giapponese e coreano), lo spazio a doppio byte (Unicode \u3000) non è incluso in \snessuna implementazione che ho provato finora (Perl, .NET, PCRE, Python). Dovrai prima normalizzare le tue stringhe (ad esempio sostituendo tutte \u3000con \u0020), oppure dovrai usare un set di caratteri che includa questo codepoint oltre a qualsiasi altro spazio bianco che stai prendendo di mira, come [ \t\u3000].

Se stai usando Perl o PCRE, hai la possibilità di usare l' \habbreviazione per lo spazio bianco orizzontale , che sembra includere lo spazio a byte singolo, lo spazio a doppio byte e la tabulazione, tra gli altri. Vedi il thread Match whitespace ma non newline (Perl) per maggiori dettagli.

Tuttavia, questa \hscorciatoia non è stata implementata per .NET e C #, come meglio sono stato in grado di dire.


1
Buon punto. Java \h(introdotto in Java 8) include \u3000, ma \snon lo include, a meno che non si imposti la modalità UNICODE_CHARACTER_CLASS (introdotto in Java 7).
Alan Moore

0

Se vuoi sostituire lo spazio sotto il codice ha funzionato per me inC#

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

Per Tab

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.