我正在通过c#中的ftpwebrequest从供应商处读取数据。因此,数据将逐行呈字符串格式,例如
0123030014030300123003120312030203013003104234923942348
我需要将这些数据解析到适当的字段中,然后我可以将它们插入到一个高级的sql中。我知道每个字段的起始位置,所以我想使用正则表达式来解析每个字段。这是我用来获取数据的函数,我只需要解析数据。我很难找到一个明确的解决方案来解决这个问题。任何建议将不胜感激:))
static void GetData()
{
WebClient request = new WebClient();
string url = "ftp://ftp.WebSite.com/file";
request.Credentials = new NetworkCredential("userid", "password");
try
{
byte[] newFileData = request.DownloadData(url);
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
Console.WriteLine(fileString);
}
catch (WebException e)
{
}
}
答案 0 :(得分:1)
如果只是按指定的长度分割,则不需要使用正则表达式。在C#中,您可以使用String.Substring,例如:
byte[] newFileData = request.DownloadData(url);
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
string fieldOne = fileString.Substring(0, n);
答案 1 :(得分:0)
以下是正则表达式的示例。我们通过\ d {x}的总数指定要捕获的内容,例如\ d {4}给出4位数。然后我们将它放入一个命名的捕获组(?<NameHere>\d{4})
,然后我们通过它的名称(在前面的文本示例中为NameHere)来访问它以进行处理。
请参阅示例,删除三个字段Id,group#和Target number:
string data = "0123030014030300123003120312030203013003104234923942348";
string pattern = @"^(?<ID>\d{4})(?<Group>\d{3})(?<Target>\d{8})";
Match mt = Regex.Match(data, pattern);
// Writes
// ID: 0123 of Group 030 on Target: 01403030
Console.WriteLine("ID: {0} of Group {1} on Target: {2}", mt.Groups["ID"].Value, mt.Groups["Group"].Value, mt.Groups["Target"].Value);