2017-06-22 6 views
1

J'essaie d'utiliser une expression régulière pour analyser un fichier journal généré à partir d'une commande dir de PSFTP.PSFTP Comment obtenir le nom de fichier à partir de la commande Dir en utilisant RegExp

Exemple Dir exemple 1

drwxr-xr-x 1 0  0     0 Jun 21 13:13 . 
drwxr-xr-x 1 0  0     0 Jun 21 13:13 .. 
-rw-r--r-- 1 0  0    897 Jun 20 15:02 EQA.txt 
-rw-r--r-- 1 0  0    897 Jun 20 15:06 EQA1.txt 
-rw-r--r-- 1 0  0    897 Jun 16 20:41 Test.txt 
-rw-r--r-- 1 0  0    897 Jun 16 21:46 Test1.txt 
-rw-r--r-- 1 0  0    897 Jun 21 13:13 Test4.txt 
-rw-r--r-- 1 0  0    913 May 31 18:01 test.123456789.txt 
psftp> bye 

EXEMPLE Exemple Dir 2

drwx------ 2 MikePC-apps users  4096 Apr 5 2016 . 
drwx------ 4 MikePC-apps users  4096 Jan 20 2016 .. 
-rw-r--r-- 1 MikePC-apps users   82 Apr 5 2016 test.txt.$01 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.$02 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.asc 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test1.txt.$01 
-rw-r--r-- 1 MikePC-apps users  1927 Apr 4 2016 test.zip 

D'après ce que je trouve sur le net, si un fichier est de plus de 6 mois ou à l'avenir, l'année est affiché à la place de l'heure dans la journée.

Pour l'exemple 1, j'utilise une expression regex :/d/d/s .*.*.* suivie d'une fonction de sous-chaîne pour récupérer les noms de fichiers.

Mais je ne sais pas comment aborder le deuxième exemple. J'espérais peut-être qu'il y ait un paramètre pour la commande dir pour inclure l'horodatage afin que je puisse utiliser la même regex. Ou peut-être existe-t-il une autre expression régulière qui peut gérer les deux exemples.

Merci beaucoup!

Répondre

0

Essayez suivante:

  string[] inputs = { 
            "drwxr-xr-x 1 0  0     0 Jun 21 13:13 .", 
            "ddrwxr-xr-x 1 0  0     0 Jun 21 13:13 ..", 
            "d-rw-r--r-- 1 0  0    897 Jun 20 15:02 EQA.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 20 15:06 EQA1.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 16 20:41 Test.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 16 21:46 Test1.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 21 13:13 Test4.txt", 
            "d-rw-r--r-- 1 0  0    913 May 31 18:01 test.123456789.txt", 
            "drwx------ 2 MikePC-apps users  4096 Apr 5 2016 .", 
            "drwx------ 4 MikePC-apps users  4096 Jan 20 2016 ..", 
            "-rw-r--r-- 1 MikePC-apps users   82 Apr 5 2016 test.txt.$01", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.$02", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.asc", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test1.txt.$01", 
            "-rw-r--r-- 1 MikePC-apps users  1927 Apr 4 2016 test.zip" 
           }; 

      string pattern = @"^(?'attrib'[^\s]+)\s+(?'links'[^\s]+)\s+(?'owner'[^\s]+)\s+(?'group'[^\s]+)\s+(?'size'[^\s]+)\s+(?'date'.+)\s+(?'filename'[^$]+)$"; 

      foreach (string input in inputs) 
      { 
       Match match = Regex.Match(input, pattern); 
       Console.WriteLine("attrib : '{0}', links : '{1}', owner : '{2}', group : '{3}', size : '{4}', date : '{5}', filename : '{6}'", 
        match.Groups["attrib"].Value, match.Groups["links"].Value, match.Groups["owner"].Value, match.Groups["group"].Value, 
        match.Groups["size"].Value, match.Groups["date"].Value, match.Groups["filename"].Value); 
      } 
      Console.ReadLine(); 
+0

Merci pour la solution, je modifie le motif à 'modèle de chaîne = @"^('attrib' [^ \ s] +?) \ S + ('liens'? [^ \ s] +) \ s + (? 'propriétaire' [^ \ s] +) \ s + (? 'groupe' [^ \ s] +) \ s + (? 'taille' [^ \ s] +) \ s + (? 'date'. +) \ s + (? 'nom_fichier'. +) $ ";' ceci est également inclus 'test1.txt. $ 01' comme nom de fichier. +1 (Désolé de ne pas pouvoir voter) Merci – Bonobo

+0

Le $ 01 fait partie du nom de fichier – jdweng

+0

J'ai testé la regex '([^ \ s] +) \ s + ([^ \ s] +) \ s + ([^ \ s ] +) \ s + ([^ \ s] +) \ s + ([^ \ s] +) \ s + (. +) \ s + ([^ $] +) 'sur [Regexr] (http: // regexr. com /) et il s'est arrêté à $ en raison de [^] est un ensemble nié. J'ai supprimé $ à la fin du motif car la chaîne est déjà divisée en phrase – Bonobo