Comment rechercher des occurrences de plus d'un espace entre les mots d'une ligne
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Tous les éléments ci-dessus sont des correspondances valides pour cette expression régulière. Quelle regex dois-je utiliser?
Réponses:
ESPACE (2 ou plus)
Vous pouvez également vérifier qu'avant et après ces espaces, les mots suivent. (pas d'autres espaces comme des tabulations ou de nouvelles lignes)
la même chose, mais vous pouvez également choisir (capturer) uniquement les espaces pour des tâches comme le remplacement
ou voir qu'avant et après les espaces, il y a quelque chose, pas seulement des caractères de mots (sauf les espaces)
la source
\w
signifie «caractères de mots», c'est-à-dire alphanumériques et traits de soulignement, mais pas les autres caractères non espace. Pour vérifier les espaces non blancs, utilisez\S
(S majuscule). De plus, le premier ne correspondra qu'aux lignes contenant deux espaces ou plus et rien d'autre.\S
, je préfère juste ne pas me fier à la casse des caractères pour une telle fonctionnalité, c'est plus facile à lire.\w[ ]{2,}\w
ne correspondra pasword.<2 spaces>more words
ou une chaîne qui se compose entièrement d'espaces.[^\s]([ ]{2,})[^\s]\w
échouera sur les lignes commençant par des espaces ou des chaînes commebla<2 spaces>.
...Solution simple:
Cela correspond à toutes les occurrences d'un ou de plusieurs caractères d'espacement. Si vous devez faire correspondre la ligne entière, mais uniquement si elle contient deux ou plusieurs caractères d'espacement consécutifs:
Si les espaces n'ont pas besoin d'être consécutifs:
la source
.*
est généralement gourmand, ce qui signifie qu'il atteindra la fin de la chaîne testée, et tout ce qui suit, s'il y a des caractères obligatoires, ne correspondra pas. Habituellement, dans ce cas, c'est une bonne pratique d'ajouter?
, comme ceci.*?
. Cela m'est arrivé en utilisant le PCRE de PHP/^.*b.*$/
correspond en fait"foobar"
, même si vous vous attendez à ce que le premier gourmand.*
corresponde déjà à la chaîne entière.Cette regex sélectionne tous les espaces, vous pouvez l'utiliser et la remplacer par un seul espace
exemple en python
la source
Recherchez
[ ]{2,}
. Cela trouvera deux ou plusieurs espaces adjacents n'importe où dans la ligne. Il correspondra également aux espaces de début et de fin ainsi qu'aux lignes constituées entièrement d'espaces. Si vous ne voulez pas cela, consultez la réponse d'Alexandre.En fait, vous pouvez omettre les crochets, ils sont juste pour plus de clarté (sinon le caractère d'espace qui est répété n'est pas très visible :)).
Le problème avec
\s{2,}
est qu'il correspondra également aux retours à la ligne sur les fichiers Windows (où les retours à la ligne sont indiqués parCRLF
ou\r\n
correspondent à\s{2}
.Si vous souhaitez également rechercher plusieurs onglets et espaces, utilisez
[ \t]{2,}
.la source
more than one space between words in a line
. Comment se passe-t-il[ ]{2,}
entre les mots? Avez-vous même lu la question?Voici ma solution
Cela supprimera tous les chiffres, virgules et nouvelles lignes mais sélectionnez l'espace du milieu tel que l'ensemble de
la source