繁体   English   中英

使用2个或更多空格将字符串拆分为令牌

[英]Split string into tokens using 2 or more spaces

我有一个试图解析的文本文件。 截至目前,我正在使用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个或更多空格标记。 我怎样才能做到这一点?

当然-使用String.Split重载,重载采用字符串定界符而不是char定界符:

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

如果段之间存在奇数个空格,则必须使用Trim()删除前导/后缀空格。

代替使用String.Split使用Regex.Split并为参数提供"\\s{2,}"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM