2010-11-22 4 views
-3

Ich habe ein Programm, das sowohl Tokenize- als auch Regular-Ausdrücke verwendet, um beide Leerzeichen ('') und ',' aus einer Protokolldatei-Zeichenfolge herauszufiltern.C# -Programmierung Wie können wir unsere Leerzeichen in Verzeichnissen nicht mit Regular Expression filtern?

Da sich jedoch Leerzeichen in einem Protokolldatei-String-Verzeichnis befinden, kann jemand bitte einen Hinweis zu den regulären Ausdrücken geben, die ich verwenden könnte? Vielen Dank!

* Bitte beachten Sie, dass es SPACES und COMMAS aufgrund des Datums, der Uhrzeit und der Inhalte gibt, die in Token umgewandelt werden müssen! ÜBERNEHMEN SIE NICHT, DASS ICH DIE RÄUME FÜR SPASS ANGEORDNET habe und negative Bewertungen abgegeben habe! Jemanden mögen.

Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128-3,C:/Program Files/AccessData/AccessData Forensic Toolkit/Program/wordnet/Adj.dat 

Die Ergebnisse Ausgabe des Programms wäre „

Thu 
Mar 
02 
1995 
21:31:00 
2245107 
m... 
r/rrwxrwxrwx 
0 
0 
8349-128-3 
C:/Program 
Files/AccessData/AccessData 
Forensic 
Toolkit/Program/wordnet/Adj.dat 

Deshalb ist die“ C:

Eine solche Zeichenfolge Zeile der Protokolltextdatei würde/Programme/Accessdata/Accessdata Forensic Toolkit/Programm/wordnet/Adj.dat“wird durch die Räume von regulären Ausdrücken getrennt

die Programmcodes.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Text.RegularExpressions; 


namespace Testing 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     String value = "Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128- 
     3,C:/Program Files/AccessData/AccessData Forensic 
     Toolkit/Program/wordnet/Adj.dat"; 
     // 
     // Split the string on line breaks. 
     // ... The return value from Split is a string[] array. 
     // 

     //foreach (String r in lines) 
     //{ 
      String rex = @"[\s,]"; 

      String[] token = Regex.Split(value, rex); 

      foreach (String line in token) 
      { 
       Console.WriteLine(line); 
      } 
     //} 
    } 
} 
} 
+1

Warum teilen Sie nach Leerzeichen? Es sieht so aus, als wären Kommas die einzigen Trennzeichen in dieser Beispielzeile. (Und können Dateinamen Kommas enthalten?) –

+0

Alter ... Es ist ziemlich offensichtlich, da es eine Zeit gibt? Wie oben erwähnt, handelt es sich bei LOG TEXT FILE STRING offensichtlich um eine MACtimes-Protokolldatei. MACtimes ist ein auf der forensischen Zeitlinie basierendes Protokoll. – JavaNoob

Antwort

3

Nicht auf Leerzeichen aufteilen, sie sind Teil der Werte.

string value = "Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128-3,C:/Program Files/AccessData/AccessData Forensic Toolkit/Program/wordnet/Adj.dat"; 
string[] token = value.Split(','); 
foreach (String line in token) { 
    Console.WriteLine(line); 
} 

Wenn Sie die Komponenten des Datums als separate Werte wollen, können Sie das auf die Felder aufgeteilt:

string[] dateCompent = token[0].Split(' '); 
+0

Ich brauche sowohl die Leerzeichen als auch "," getrennt nach Uhrzeit, Datum und Inhalt. Kannst du mir damit helfen? Vielen Dank. – JavaNoob

+0

@JavaNoob: Zuerst nur auf Komma teilen, dann können Sie den Datums- und Uhrzeitwert nehmen und auf Leerzeichen aufteilen, um seine eigenen Komponenten zu erhalten. – Guffa

+0

Ist es möglich, alle verschiedenen Filter für 1 einzelne reguläre Ausdrücke zu verwenden? Das würde wirklich viel helfen. Vielen Dank. – JavaNoob

0

Wenn Sie haben es in einer einzigen Regex zu tun, und wenn die einzige Beispiel, wo Sie tun auf Räume teilen wollen, ist in dem ersten Punkt (dh das Datum string), dann können Sie tun

splitArray = Regex.Split(subjectString, @",|(?<=^[^,]*)\s+"); 

Dieser Regex teilt sich entweder in ein Komma oder in ein Leerzeichen auf, aber nur dann, wenn diesem Leerzeichen zuvor kein Komma in der Zeichenfolge folgt.

Erläuterung:

,  # match a , 
|  # or 
(?<= # assert that it is possible to match the following before the current position: 
^  # start of string 
[^,]* # any number of characters except commas 
)  # end of positive lookahead assertion 

Beachten Sie jedoch, dass Dateinamen Kommata enthalten könnten, auch (zumindest das dort geltende Rechtslage - ob sie in Ihren Daten erscheinen ist etwas, das nur Sie beurteilen). \ s + # Dann passen Sie ein oder mehrere Leerzeichen an