2010-05-30 16 views
2

Existe-t-il une expression régulière singulière pouvant être utilisée, par exemple, dans la boîte de dialogue de recherche/remplacement d'un éditeur de texte pour inverser l'ordre des éléments d'une liste?RegEx pour inverser l'ordre de la liste?

Par exemple, prenez cette liste:

  • Premier élément
  • Deuxième élément
  • Troisième élément

Sélectionnez dans un éditeur de texte comme EditPad, faire apparaître la recherche et de remplacement boîte, appliquez une regex (exécutez comme une boucle ou non) et transformez-la en:

  • Troisième élément
  • Deuxième élément
  • Premier élément

peut-il être fait?

+1

Je serais surpris si cela pourrait se faire en une seule expression; cela ne ressemble en rien à un travail pour RegEx, dans tous les cas. – Jay

Répondre

4

Cela ne peut pas être effectué par une expression régulière.

Je vous recommande d'utiliser un langage comme Perl, où vous pouvez utiliser une expression régulière pour diviser la liste et l'écrire dans l'ordre inverse.

0

pas techniquement des expressions régulières, mais il y a un sed one-liner qui inverse les lignes d'entrée (source):

sed '1!G;h;$!d' 

et une commande vi pour inverser les lignes du fichier actuel (source):

:g/.*/m0 
1

uniquement si la liste a un nombre fixe connu n des articles, et même alors l'expression régulière devient plus compliqué que n pousse. (La difficulté principale est généralement d'obtenir une nouvelle ligne littérale dans le moteur.)

Il est possible de générer cette série d'expressions rationnelles de plus en plus complexes assez facilement avec un langage de script; Cependant, une fois que vous utilisez un langage de script, il est presque certainement plus facile de l'utiliser pour l'inversion elle-même!

2

Dans MSDOS

SORT /R <originallist.txt> resortedlist.txt 
+1

Ceci n'inverse pas l'ordre de l'entrée, cela trie l'entrée dans l'ordre inverse. Pas la même chose. – Dan

0

Je me rends compte qu'il a été tout à fait un certain temps que cela a été demandé ... mais cette réponse n'a pas été ici.

Selon la façon dont vous avez formaté votre liste dans l'éditeur de texte que vous pouvez faire quelque chose le long de ces lignes:

Texte original: "Le Quick Brown Fox"

Recherche: (\ w +) \ s (\ w +) \ s (\ w +) \ s (\ w +)

Remplacer: $ 4 1

$ 3 2 $ $ sortie: "Fox Quick Brown le" (fonctionne sur notepad ++, assurez-vous de sélectionner la option pour "expression régulière")

équivalent au javascript:

 var string = "The Quick Brown Fox"; 
     string.replace(/(\w+)\s(\w+)\s(\w+)\s(\w+)/,"$4 $3 $2 $1"); 

bonne référence est https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions