用正则表达式重写

时间:2010-11-06 15:43:58

标签: c# regex

Disposition: form-data; name="To"

ang <ang11@google.com>
-----------------------------7da3d81f160588
Content-Disposition: form-data; name="CC"


-----------------------------7da3d81f160588
Content-Disposition: form-data; name="BCC"


-----------------------------7da3d81f160588
Content-Disposition: form-data; name="Subject"

MySubject
-----------------------------7da3d81f160588
Content-Disposition: form-data; name="File"; filename=""<br/>
Content-Type: application/octet-stream


-----------------------------7da3d81f160588
Content-Disposition: form-data; name="cf_loader"

on
-----------------------------7da3d81f160588
Content-Disposition: form-data; name="File"; filename=""
Content-Type: application/octet-stream


-----------------------------7da3d81f160588
Content-Disposition: form-data; name="template_id"


-----------------------------7da3d81f160588
Content-Disposition: form-data; name="Body"

MyBody

我编写的代码可以在KeyValuePair中获取信息和写入。如下:

键 - 值
To - ang&lt; \ ang11@google.com>
CC - 空的 BCC - 空的 主题 - 我的主题
等 我的代码用于String类。我需要使用正则表达式,但我不理解它们。请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

不应使用正则表达式编写MIME解析器。问题是你需要一个具有状态的解析器,并且它不能真正适合正则表达式。

但是,您可以使用正则表达式解析部分,例如:

  • 首先通过分割边界将MIME正文拆分为多个部分:var parts = mime.Split("-----------------------------7da3d81f160588");;

  • 然后,使用part.Split(new { "\r\n" }, 2, StringSplitOptions.None);;

  • 提取所有标题
  • 然后,解析标题。这可以使用正则表达式完成,但可能更容易这样做:headerLine.Split(new [] { ':' }, 2).Select(p => p.Trim());

现在,这些单独的部分也可以使用正则表达式,但这比一些简单的Split要困难得多。