Программирование на C # Как не фильтровать наши пробелы в каталогах, используя регулярные выражения? - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть программа, которая использует токены и регулярные выражения для фильтрации пробелов ('') и "," из строки файла журнала.

Однако, поскольку в строковом каталоге файла журнала есть пробелы, может кто-нибудь предложить какой-нибудь совет относительно регулярных выражений, которые я мог бы использовать? Спасибо!

* Пожалуйста, обратите внимание, что существуют ПРОСТРАНСТВА и КОММАСЫ из-за даты, времени и содержимого, которые должны быть токенизированы! НЕ ДОПУСКАЙТЕ, ЧТО Я РАЗМЕЩАЛ ПРОСТРАНСТВА ДЛЯ ВЕСЕЛЬЯ, и начинайте отдавать отрицательные голоса! Как кто-то.

Одна такая строка в текстовом файле журнала будет:

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

Вывод результатов программы будет "

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

Следовательно, «C: / Program Files / AccessData / AccessData Forensic Toolkit / Program / wordnet / Adj.dat» отделен из-за регулярных выражений пробелов.

Коды программ:

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);
            }
        //}
    }
}
}

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Не разделяйте на пробелы, они являются частью значений.

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);
}

Если вы хотите, чтобы компоненты даты были отдельными значениями, вы можете разделить их на пробелы:

string[] dateCompent = token[0].Split(' ');
0 голосов
/ 22 ноября 2010

Если у вас есть , чтобы сделать это в одном регулярном выражении, и если единственный экземпляр, где вы делаете , хотите разделить на пробелы, находится в первом элементе (то есть в строке даты) тогда вы можете сделать

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

Это регулярное выражение разделяется либо на запятую, либо на пробел, но только если этот пробел не следует после запятой где-то в строке.

Пояснение:

,       # 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

Имейте в виду, однако, что имена файлов также могут содержать запятые (по крайней мере, они там законны - то, появляются ли они в ваших данных - это только то, что вы можете судить). \ s + #, затем сопоставьте один или несколько пробельных символов

...