0

次のようなファイルがあります。

J6      INT-00113G  227.905    5.994  180  ~!@#$%&^)
J3      INT-00113G  227.905 -203.244  180  12341341312315
U13     EXCLUDES    -42.210  181.294  180  QFP128
U3      IC-00276G     5.135  198.644  90   B%GA!@-48
U12     IC-00270G  -123.610 -201.594  0    SOP8_000
J1      INT-00112G  269.665  179.894  180  SOIC16_1
J2      INT-00112G  269.665  198.144  180  SOIC16-_2
..      ..........  .......  .......  ...  ................

そして、リストから削除するために、 6 列目の終了値を一致させたいと思います。6 列目の値の長さは未定で、任意の文字を含めることができます。だから私がやりたいのは、スペースの前に終了値を一致させることです。または行末だけ。


コード:

        // Reads the lines in the file to format.
        var fileReader = File.OpenText(filePath + "\\Remove Package 1 Endings.txt");

        // Creates a list for the lines to be stored in.
        var fileList = new List<string>();

        // Adds each line in the file to the list.
        while (true)
        {
            var line = fileReader.ReadLine();
            if (line == null)
                break;

            fileList.Add(line);
        }

        var mainResult = new List<string>();
        var theResult = new List<string>();

        foreach (var mainLine in fileList)
            mainResult.Add(string.Join(" ", mainLine));

        foreach (var theLine in mainResult)
        {
            // PLACEMENT ONE Regex
            Match theRegex = Regex.Match(theLine, @"insert the regex here!");

            if (theRegex.Success)
                theResult.Add(string.Join(" ", theLine));
        }

        // Removes the matched values from both of the Regex used above.
        List<string> userResult = mainResult.Except(theResult).ToList();

        // Prints the proper values into the assigned RichTextBoxes.
        foreach (var line in userResult)
            richTextBox2.AppendText(line + "\n");

私がやろうとしているのは、ファイルを次のようにすることです。

J6      INT-00113G  227.905    5.994  180
J3      INT-00113G  227.905 -203.244  180
U13     EXCLUDES    -42.210  181.294  180
U3      IC-00276G     5.135  198.644  90
U12     IC-00270G  -123.610 -201.594  0
J1      INT-00112G  269.665  179.894  180
J2      INT-00112G  269.665  198.144  180

質問:

  • 誰かがこれの正規表現を考え出すのを手伝ってくれますか?

編集:

追加コード:

        var lines = new List<string>(File.ReadAllLines(filePath + "\\Remove Package 1 Endings.txt"));
        for (int i = 0; i < lines.Count; i++)
        {
            var idx = lines[i].LastIndexOf(" ");

            if (idx != -1)
                lines[i] = lines[i].Remove(idx);

            richTextBox1.AppendText(lines[i] + Environment.NewLine
        }
4

3 に答える 3

1

\S+$マルチライン機能を有効にして、(?m)それを行う必要があります。(... C#で正規表現フラグをどの程度正確に有効にするかはわかりませんが、文字列の先頭に追加することは、一部の正規表現エンジンで機能しますが、それを行う唯一の方法ではありません。)

\S-空白以外の文字に一致します
+-前の正規表現要素を1回以上一致させる必要があることを
$示します-文字列の終わり、または複数行が有効になっている場合は行の終わりに一致することを示します。

編集:あなたは各行を個別にチェックしているので、複数行のものについて心配する必要はありません。

(他の人が述べているように、これに正規表現を使用すると、おそらく必要以上に複雑になります。)

于 2011-07-25T21:08:36.220 に答える
1

これを実際よりも複雑にしていると思います。たとえば、次の例は、例に従ってフォーマットされている場合、データの最後の部分を削除するのに役立ちます。トリミング(および明らかにエラーの軽減)などの微調整が必​​要です。これが適していると確信しています。

var lines = new List<string>(File.ReadAllLines(path));
for (int i = 0; i < lines.Count; i++) 
{
    var idx = lines[i].LastIndexOf(" ");   
    if (idx != -1)
    {     
        lines[i] = lines[i].Remove(idx);
    }
}

ファイルのすべての行を一度に読み取ることができることに注意してください。これは、ロードするファイルのサイズによっては常に望ましいとは限りませんが、処理する前に各行をロードしていることがわかります。その場合、全体をより簡潔にすることができます。

于 2011-07-25T21:10:57.117 に答える
0

各列が使用できるスペースで区切られているという事実に頼るだけです:

\s+([\S]*)$
于 2011-07-25T21:08:54.020 に答える