-1

このファイルを正規表現で分割する方法を知っている人はいますか

1 TESTAAA      SERNUM    A DESCRIPTION
2 TESTBBB      ANOTHR    ANOTHER DESCRIPTION
3 TESTXXX      BLAHBL

各列の長さ

{id} {firsttext} {serialhere} {description}
 4    22          6            30+

このように、すべての値を string[] に格納する正規表現を使用することを計画しています。

        using (StreamReader sr = new StreamReader("c:\\file.txt"))
        {
            string line = string.Empty;
            string[] source = null;
            while ((line = sr.ReadLine()) != null)
            {
                source = Regex.Split(line, @"(.{4})(.{22})(.{6})(.+)", RegexOptions.Singleline);
            }

        }

しかし、私には2つの問題があります。

  1. 分割により、6 つの要素 source[0] = "" および source[5] ="" が作成されます。ご覧のとおり、1 行に 4 つの要素 (列) しかありません。
  2. 4 番目の列がある 3 行目の場合、空白がある場合はその位置が作成されますが、空白がない場合はこの列が失われます。

したがって、正規表現または別のソリューションで分割するための最良のパターンまたはソリューションは、それを評価することになります!!! 固定幅で分割したい。ありがとう。

4

2 に答える 2

2

Substring長さが固定されている場合は、メソッドを使用する方が簡単です。

string id = line.Substring(0, 4);
string firsttext = line.Substring(4, 22);
string serial = line.Substring(26, 6);
string description = line.Substring(32);

本当に正規表現を使用したい場合は、以下のものを使用できます。最初の 3 列のデータにスペースがない場合にのみ機能することに注意してください。また、最初の列は数字で、残りは単なるアルファであると想定しました。

String input = "2 TESTBBB      ANOTHR    ANOTHER DESCRIPTION";
Match match = Regex.Match(input, @"^(\d*)\s*(\w*)\s*(\w*)\s*(.*)$");
if (match.Groups.Count == 5)
{
    string id = match.Groups[1].Value;
    string firsttext = match.Groups[2].Value;
    string serial = match.Groups[3].Value;
    string description = match.Groups[4].Value;
}
于 2013-11-04T01:50:18.957 に答える