【问题标题】:Split string into tokens using 2 or more spaces使用 2 个或更多空格将字符串拆分为标记
【发布时间】:2015-02-26 20:41:04
【问题描述】:

我有一个要解析的文本文件。截至目前,我正在使用 String.Split 方法来标记字符串。

这里是一些示例文本:

  GP71011N                  Sign                        1.00 each    4298.96000       4298.96
  H50 ENGINE*               Sign                        1.00 each    9027.65000       9027.65
  JR70883*                  Sign                        1.00 each   10674.24300      10674.24
  KE31453                   Sign                        1.00 each    1000.00000       1000.00
  MK51645                   Sign                        6.00 each   13718.06000      82308.36
  MK51649                   Sign                        1.00 each   14331.08000      14331.08
  MK51722                   Sign                        4.00 each   13186.00000      52744.00
  ML51651                   Sign                        5.00 each   15988.00000      79940.00

现在我正在逐行读取文件并用一个空格删除所有多余的空格,然后我将字符串标记为一个空格,但现在我正在查看它......这不起作用。

这是我当前的代码:

string output = "";

string currentPCat = "";
string currentAccount = "";

bool IsValidLine = false;
var lineNo = 1;
while ((line = file.ReadLine()) != null)
{
    if(lineNo <= 36)
    {
        lineNo++;
    }
    else
    {
        line = Regex.Replace(line, @"\s+", " ");
        var tokens = line.Split(' ');
        if (tokens.Count() >= 4 && tokens.Contains("PCAT:"))
        {
            currentPCat = tokens[1];
            currentAccount = tokens[2];
            IsValidLine = true;
        }
        else if (tokens.Count() == 7)
        {
            if (IsValidLine)
            {
                output = output + currentPCat + "," + currentAccount + "," + tokens[1] + "," + tokens[2] + "," + tokens[3] + "," + tokens[4] + "," + tokens[5] + "," + tokens[6] + "\r\n";
            }
        }
        else
        {
            IsValidLine = false;
        }
        lineNo++;
    }
}

我真正需要更改的部分是标记器,所以这部分:

line = Regex.Replace(line, @"\s+", " ");
var tokens = line.Split(' ');

我想我需要删除第一行,并且我希望标记被 2 个或更多空格标记。我该怎么做?

【问题讨论】:

    标签: c# string token


    【解决方案1】:

    当然 - 使用带有 string 分隔符而不是 char 分隔符的overload of String.Split

    var tokens = line.Split(new string[] {"  "},StringSplitOptions.RemoveEmptyEntries);
                     .Select(s => s.Trim())
                     .ToArray();
    

    如果段之间有奇数个空格,则Trim() 是删除前导/尾随空格所必需的。

    【讨论】:

      【解决方案2】:

      不要使用String.Split,而是使用Regex.Split 并将"\s{2,}" 提供给参数。

      string[] tokens = Regex.Split(line, @"\s{2,}");
      

      【讨论】:

      • 我如何通过空白或“*”稍微改变你的
      • 正则表达式中的 * 字符不是 *。
      • @user3788671,我认为string[] tokens = Regex.Split(line, @"\s{2,}|\*");应该这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2020-05-24
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多