从C#中的字符串行中获取特定字段或字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从C#中的字符串行中获取特定字段或字符相关的知识,希望对你有一定的参考价值。
我有一个文件并逐行读取文件并从字符串行中提取特定对象。
例如,字符串行有两种格式。
VA001748714600006640126132202STRONG 4P 4X44G000099
VA 00174 871460000664 012 6132202 STRONG 4P 4X44G 000099
现在我需要提取字符串并存储到我的表格和字段中,如下面和上面两个行数据生成在下面的字段(欲望结果)。
Code Location SerialNo Quantity ItemNo Description Price
VA 00174 871460000664 12 6132202 STRONG 4P 4X44G0 000099
我试过的。我创建了一个从字符串返回object[]
提取的方法
public static object[] ProcessLine(string line)
{
var obj = new object[7];
var str = line.Replace(" ", "").Replace(" ", "");
string code = str.Substring(0, 2)?.Trim();
string location = str.Substring(2, 5)?.Trim();
string serialNo = str.Substring(7, 12)?.Trim();
string quantity = str.Substring(19, 3)?.Trim();
int qty = 0;
if (!string.IsNullOrEmpty(quantity))
{
qty = Convert.ToInt32(quantity);
}
string itemNo = str.Substring(22, 7)?.Trim();
Regex MyRegex = new Regex("[^a-z ]", RegexOptions.IgnoreCase);
string description = MyRegex.Replace(line.Substring(2), @"")?.Trim();
string price = str.Substring(str.Length - 6)?.Trim();
obj.SetValue(code, 0);
obj.SetValue(location, 1);
obj.SetValue(serialNo, 2);
obj.SetValue(qty, 3);
obj.SetValue(itemNo, 4);
obj.SetValue(description, 5);
obj.SetValue(price, 6);
return obj;
}
我找到子字符串并存储到对象中,我也找不到描述因为这个字段不是固定字母。
(Code,Location,SerialNo,Quantity,ItemNo and Price)
是固定的no.of字符,(Description)
字段是任何字符或更改。
如何使用regex
找到这个字段的值和描述我试图找到描述,但它提取没有数字。
你可以声明一个正则表达式
private static readonly Regex rx = new Regex(@"^(w{2})s*(w{5})s*(w{12})s*(d{3})s*(d{7})s*(.*?)s*(d{6})$", RegexOptions.Compiled);
关键是使用匹配整个字符串的正则表达式(^
匹配字符串的开头,$
匹配字符串的结尾),使用w
(任何字母/数字/ _
字符)或d
(任何数字字符),{m}
量化器匹配与w
或d
匹配的一定数量的字符,匹配Description
字段与.*?
,一个尽可能少地匹配除换行符之外的任何0+字符的懒点模式,并允许字段之间的任何0+空格字符与s*
。
然后,你可以使用它
public static object[] ProcessLine(string line)
{
object[] obj = null;
var m = rx.Match(line);
if (m.Success)
{
obj = new object[] {
m.Groups[1].Value,
m.Groups[2].Value,
m.Groups[3].Value,
int.Parse(m.Groups[4].Value).ToString(), // remove leading zeros
m.Groups[5].Value,
m.Groups[6].Value,
m.Groups[7].Value
};
}
return obj;
}
请参阅OP中两个字符串的C# demo演示输出:
VA, 00174, 871460000664, 12, 6132202, KING PEPERM E STRONG 4P 4X44G, 000099
VA, 00174, 871460000664, 12, 6132202, KING PEPERM E STRONG 4P 4X44G, 000099
如果你真的想使用正则表达式,请参阅Wiktor's answer。
但是,您不需要正则表达式来解决此问题。
由于除描述之外的所有字段都具有已知长度,因此您可以计算描述字段的长度。根据您的规格,描述从第29位开始,然后是价格字段的6个位置。因此,这应该给你描述:
string description = str.Substring(29, str.Length-29-6);
以上是关于从C#中的字符串行中获取特定字段或字符的主要内容,如果未能解决你的问题,请参考以下文章
如何从 webview 中的 json responseString 获取特定方法