使用 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
现在我正在逐行读取文件并用一个 space 删除所有额外的 spaces 然后我用一个 space 标记字符串但是现在我正在看它...那是行不通的。
这是我当前的代码:
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 个或更多 space 标记化。我该怎么做?
不要使用 String.Split
,而是使用 Regex.Split
并向参数提供 "\s{2,}"
。
string[] tokens = Regex.Split(line, @"\s{2,}");
当然 - 使用采用 string 分隔符而不是 char 分隔符的 overload of String.Split
:
var tokens = line.Split(new string[] {" "},StringSplitOptions.RemoveEmptyEntries);
.Select(s => s.Trim())
.ToArray();
如果段之间有奇数个空格,则需要 Trim()
来删除 leading/trailing 个空格。
我有一个要解析的文本文件。截至目前,我正在使用 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
现在我正在逐行读取文件并用一个 space 删除所有额外的 spaces 然后我用一个 space 标记字符串但是现在我正在看它...那是行不通的。
这是我当前的代码:
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 个或更多 space 标记化。我该怎么做?
不要使用 String.Split
,而是使用 Regex.Split
并向参数提供 "\s{2,}"
。
string[] tokens = Regex.Split(line, @"\s{2,}");
当然 - 使用采用 string 分隔符而不是 char 分隔符的 overload of String.Split
:
var tokens = line.Split(new string[] {" "},StringSplitOptions.RemoveEmptyEntries);
.Select(s => s.Trim())
.ToArray();
如果段之间有奇数个空格,则需要 Trim()
来删除 leading/trailing 个空格。