2010-08-27 10 views

risposta

96

classi Utilizzo di caratteri: [ \t]

+1

Spot on per il mio problema. Vedi anche http://stackoverflow.com/a/25956935/292060 per una classe di caratteri '\ h' perl-only, ma mostra che ci sono molti altri caratteri di spaziatura, nel caso tu abbia bisogno di aggiungerli alla lista qui. – goodeye

+0

perché dovrebbe esserci uno spazio prima di '\ t'? – Ooker

+0

@Ooker Per catturare uno spazio letterale – codemonkee

20

provare questo set di caratteri:

[ \t] 

Ciò corrispondenza solo uno spazio o una tabulazione.

3

Nota: Per chi si occupa di testo CJK (cinese, giapponese e coreano), lo spazio a doppio byte (Unicode \u3000) è non incluso nel \s per qualsiasi applicazione che ho provato finora (Perl , .NET, PCRE, Python). Dovrai prima normalizzare le stringhe (ad esempio sostituendo tutto lo \u3000 con \u0020), oppure dovrai utilizzare un set di caratteri che include questo punto di codice oltre a qualsiasi altro spazio bianco che stai targeting, come ad esempio [ \t\u3000].

Se stai usando Perl o PCRE, si ha la possibilità di utilizzare il \h scorciatoia per spazi orizzontali, che sembra includere lo spazio singolo byte, spazio doppio byte, e scheda, tra gli altri. Vedere il filo Match whitespace but not newlines (Perl) per maggiori dettagli.

Tuttavia, questa stenografia \h non è stata implementata per .NET e C#, come meglio ho potuto dire.

+1

Buon punto. Java '' h' (introdotto in Java 8) include '\ u3000', ma' \ s' non lo fa, a meno che non si imposti la modalità UNICODE_CHARACTER_CLASS (introdotta in Java 7). –

10

Come notato da @ Eiríkr Útlendi, la soluzione accettata considera solo due caratteri di spazio bianco: la scheda orizzontale (U + 0009) e uno spazio di interruzione (U + 0020). Non considera altri caratteri di spazi bianchi come spazi non interrotti (che capita di essere nel testo che sto cercando di trattare). Un elenco di caratteri di uno spazio bianco più completo è incluso su Wikipedia e viene anche fatto riferimento nello linked Perl answer. Una soluzione # C semplice che spiega questi altri personaggi può essere costruito utilizzando character class subtraction

[\s-[\r\n]] 

o, compresa la soluzione di Eiríkr Útlendi, si ottiene

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