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 #


@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]).


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.

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.