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

我认为您使这比实际情况更复杂;例如,如果按照您的示例格式化,以下内容应该可以帮助您删除数据的最后一部分,并进行一些调整,例如修剪(并且,显然,减少错误),我相信这会适合:

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 回答
1

\S+$应该这样做,启用多行功能。(不确定您是如何在... C# 中准确启用正则表达式标志的,是吗?,但是(?m)在字符串前面添加一些正则表达式引擎可以使用,尽管这不是唯一的方法。)

\S- 匹配任何非空白字符
+- 表示前面的正则表达式元素应该匹配一次或多次
$- 表示匹配到字符串的结尾,或者如果启用了多行,则匹配到行的结尾。

编辑:您正在单独检查每一行,因此无需担心多行内容。

(尽管正如其他人所说,为此使用正则表达式可能会使事情变得比必要的复杂。)

于 2011-07-25T21:08:36.220 回答
0

仅仅依靠每列由您可以使用的空格分隔的事实:

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