2009-05-26 7 views
3

J'ai une séquence de chiffres comme ci-dessous. Je veux combiner les chiffres au groupe de 4. Quelqu'un peut-il donner une vim regex pour faire cela?Regex pour combiner les chiffres

entrée: 1234 56 7890 1234

la sortie doit être: 1234 5678 9012 34

Répondre

10

deux passes:

s/ //g 
s/\(.\{4\}\)/\1 /g 
+0

Je me demandais juste, s'il existe une regex qui peut faire en un seul passage – chappar

+0

Je ne pense pas qu'il y ait un moyen de le faire en un seul passage avec une regex. Je ne peux pas penser à comment enlever les espaces dans la même passe que le regroupement en 4s. –

+0

@Autocracy - Vous pouvez le faire en un seul passage, mais c'est horrible. Je + 1 parce que c'est la meilleure solution à mon avis, mais pour une solution en un seul passage, voir ma réponse: http://stackoverflow.com/questions/910133/regex-for-combining-digits/910222#910222 –

4

je faire en deux étapes: (1) Déposer les espaces à droite des groupes de chiffres

:s/\(\d\+\) /\1/g 

(2) regroupement:

:s/\(\d\{4}\)/\1 /g 

En cas de nombreuses lignes enregistrer une macro
ou faire ces étapes pour une zone marquée.

4

Vous peut le faire en une seule passe, mais il a l'air terrible:

:s/\(\d\) *\(\d\) *\(\d\) *\(\d\) */\1\2\3\4 /g 

Bien que cela fonctionne, il est assez stupide. Il est plus rapide de faire une de ces belles solutions à deux passes que de passer 2 minutes à travailler sur un Monsteregex ™ qui le fait en un seul passage. De plus, les solutions à deux passages sont plus faciles à comprendre.

1
:s/\(\d\)\s*\(\d\)\s*\(\d\)\s*\(\d\)\s*/\1\2\3\4 /g 

fonctionne, mais je préfère Autocracy's solution.

Questions connexes