Regex pour correspondre à plus de 2 espaces blancs mais pas de nouvelle ligne

87

Je veux remplacer tous plus de 2 espaces blancs dans une chaîne mais pas de nouvelles lignes, j'ai cette expression régulière: \s{2,}mais elle correspond également à de nouvelles lignes.

Comment puis-je faire correspondre 2 espaces blancs ou plus uniquement et pas de nouvelles lignes?

J'utilise c #

Bruno
la source
@nihcap - En fait, C # n'a pas sa propre saveur de regex, il fait partie de la bibliothèque commune .Net. Dans ce cas, .Net et C # sont tous deux des balises utiles.
Kobi

Réponses:

159

Placez les caractères d'espace blanc que vous souhaitez mettre en correspondance dans une classe de caractères. Par exemple:

[ \t]{2,}

correspond à 2 espaces ou tabulations ou plus.

Vous pouvez également faire:

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

qui correspond à tout char-espace blanc sauf \ret \nau moins deux fois (note que le capital Sen \Sest l' abréviation [^\s]).

Bart Kiers
la source
Qu'entendez-vous par "court pour" dans votre dernière phrase? À quoi ressemblerait toute l'expression régulière sans ce raccourci?
Lonnie Best
5
@LonnieBest dans les expressions régulières, pour les séquences d'échappement telles que \ w, c'est souvent une convention selon laquelle la séquence d'échappement en majuscules est le jeu de caractères inverse des séquences d'échappement en minuscules. Par exemple, \ d est l'inverse de \ D, \ s est l'inverse de \ S, \ w est l'inverse de \ W, etc. Et aussi, dans un jeu de classes de caractères délimité par [] tel que [abc], il est possible de spécifier un inverse en utilisant [^ abc]. Ainsi, \ S équivaut à [^ \ s], qui serait également équivalent à la notation non autorisée [^^ \ S], si elle était autorisée. (^^ n'est pas un moyen valide de représenter l'inverse d'un inverse.)
Dejay Clayton
@DejayClayton Merci, je ne le savais pas.
Lonnie Best
Cette réponse a fonctionné, mais pourquoi \s{2,}saisir les nouvelles lignes en procédant? Si c'était le cas, \n\s{2,}je comprendrais. Et pourquoi taper un espace littéral entre crochets fonctionne-t-il?
bit-less
"Cette réponse a fonctionné, mais pourquoi \ s {2,} saisit-elle les nouvelles lignes?" car \scorrespond aux espaces, aux tabulations et aux sauts de ligne. "Et pourquoi taper un espace littéral entre crochets fonctionne-t-il?", Eh bien, euh, parce que c'est le cas. Je ne sais pas quoi dire d'autre à ce sujet :)
Bart Kiers
0

Regex pour cibler seulement deux espaces: [] {2,} Les crochets dans l'expression régulière sont une classe de caractères. Signifiant juste les caractères là-dedans. Ici juste de l'espace. Le crochet bouclé suivant signifie deux fois ou plus.

Johan
la source