Regex per abbinare più di 2 spazi bianchi ma non una nuova riga


90

Voglio sostituire tutti più di 2 spazi bianchi in una stringa ma non nuove righe, ho questa regex: \s{2,}ma sta anche abbinando nuove righe.

Come posso abbinare solo 2 o più spazi bianchi e non nuove righe?

Sto usando c #


@nihcap - In realtà, C # non ha il suo sapore regex, è una parte della libreria comune .Net. In questo caso, .Net e C # sono entrambi tag utili.
Kobi

Risposte:


164

Metti gli spazi bianchi che vuoi abbinare all'interno di una classe di caratteri. Per esempio:

[ \t]{2,}

corrisponde a 2 o più spazi o tabulazioni.

Potresti anche fare:

[^\S\r\n]{2,}

che corrisponde a qualsiasi carattere di spazio vuoto tranne \re \nalmeno due volte (nota che la maiuscola Sin \Sè l'abbreviazione di [^\s]).


Cosa intendi con "abbreviazione di" nella tua ultima frase? Come sarebbe l'intera espressione regolare senza questa scorciatoia?
Lonnie Best

5
@LonnieBest nelle espressioni regolari, per sequenze con escape come \ w, è spesso una convenzione che la sequenza di escape maiuscola sia il set di caratteri inverso delle sequenze di escape minuscole. Ad esempio \ d è inverso di \ D, \ s è inverso di \ S, \ w è inverso di \ W, ecc. Inoltre, all'interno di un insieme di classi di caratteri delimitato da [] come [abc], è possibile specificare un inverso usando [^ abc]. Pertanto, \ S è equivalente a [^ \ s], che sarebbe anche equivalente alla notazione non consentita [^^ \ S], se fosse consentita. (^^ non è un modo valido per rappresentare un inverso di un inverso.)
Dejay Clayton,

@DejayClayton Grazie, non lo sapevo.
Lonnie Best

Questa risposta ha funzionato, ma perché \s{2,}afferra le nuove righe che la procede? Se lo fosse, \n\s{2,}capirei. E perché funziona la digitazione di uno spazio letterale tra parentesi?
po 'meno

"Questa risposta ha funzionato, ma perché \ s {2,} afferra le nuove righe che la procedono?" perché \scorrisponde a spazi, tabulazioni e interruzioni di riga. "E perché funziona digitare uno spazio letterale tra parentesi?", Beh, ehm, perché lo fa. Non so cos'altro dire al riguardo :)
Bart Kiers

0

Regex per scegliere come target solo due spazi: [] {2,} Le parentesi nella regex sono la classe di caratteri. Significa solo i caratteri lì dentro. Qui solo spazio. La seguente parentesi graffa significa due o più volte.

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.