web-dev-qa-db-fra.com

Comment rechercher des occurrences de plusieurs espaces entre les mots d'une même ligne

Comment rechercher des occurrences de plusieurs espaces entre les mots d'une même 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 expression régulière dois-je utiliser?

88
Sam
[ ]{2,}

ESPACE (2 ou plus)

Vous pouvez également vérifier cela avant et après ces espaces suivent les mots. (pas d'autres espaces comme des tabulations ou de nouvelles lignes)

\w[ ]{2,}\w

les mêmes, mais vous pouvez aussi choisir (capturer) uniquement les espaces pour des tâches comme le remplacement

\w([ ]{2,})\w

ou voir qu'avant et après les espaces il y a quelque chose, pas seulement des caractères Word (sauf les espaces)

[^\s]([ ]{2,})[^\s]
149
AlexanderMP

Solution simple:

/\s{2,}/

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:

/^.*\s{2,}.*$/

Si les espaces ne doivent pas nécessairement être consécutifs:

/^(.*\s.*){2,}$/
9
tdammers

Rechercher [ ]{2,}. Cela trouvera deux ou plusieurs espaces adjacents n'importe où dans la ligne. Elle associera également les espaces de début et de fin, ainsi que les lignes constituées entièrement d'espaces. Si vous ne le souhaitez pas, consultez la réponse d'Alexander.

En fait, vous pouvez omettre les crochets, ils sont juste pour la 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 que cela correspondra également aux nouvelles lignes des fichiers Windows (où les nouvelles lignes sont désignées par CRLF ou \r\n qui correspond à \s{2}.

Si vous souhaitez également rechercher plusieurs onglets et espaces, utilisez [ \t]{2,}.

4
Tim Pietzcker

Voici ma solution

[^0-9A-Z,\n]

Ceci supprimera tous les chiffres, les virgules et les nouvelles lignes mais sélectionnera l’espace du milieu, tel que le jeu de données de

  • 20171106,16632 ESCG0000018SB
  • 20171107,280 ESCG0000018SB
  • 20171106,70476 ESCG0000018SB
2
Ojitha

Cette expression rationnelle sélectionne tous les espaces, vous pouvez l'utiliser et la remplacer par un seul espace

\s+

exemple en python

result = re.sub('\s+',' ', data))
0
Owen Yuwono