0

我正在通过 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)
        {

        } 
    }
4

2 回答 2

1

如果您只是以指定的长度进行拆分,则不需要使用正则表达式。在 C# 中,您可以只使用String.Substring,例如:

byte[] newFileData = request.DownloadData(url);
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
string fieldOne = fileString.Substring(0, n);
于 2012-06-26T19:57:01.900 回答
0

这是正则表达式的示例。我们通过 \d{x} 的总数来指定要捕获的内容,例如 \d{4} 给我们 4 位数。然后我们将它放入一个命名的捕获组(?<NameHere>\d{4})中,然后我们通过它的名称(在前面的文本示例中的 NameHere )访问它以进行处理。

请参阅删除三个字段 Id、组号和目标编号的示例:

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);
于 2012-06-26T19:50:58.287 回答