我们有一个场景要求我们解析大量的电子邮件(纯文本),每个电子邮件“类型”是脚本针对各种平台运行的结果.有些是制表符分隔的,有些是空格分隔的,有些是我们还不知道的.
我们将来也需要支持更多“格式”.
>正则表达式
>只需字符串搜索(使用string.IndexOf等)
> Lex / Yacc
>其他
整体解决方案将在C#2.0中开发(希望3.5)
解决方法
您说的三种解决方案都涵盖了非常不同的需求.
手动解析(简单文本搜索)是最灵活和最具适应性的,然而,由于所需的解析更复杂,它很快就会成为真正的痛苦.
正则表达式是一个中间立场,这可能是你最好的选择.它们功能强大且灵活,您可以自己从调用不同正则表达式的代码中添加更多逻辑.主要缺点是这里的速度.
Lex / Yacc实际上只适用于非常复杂,可预测的语法,并且缺乏很多后编译灵活性.你不能在解析中间很容易地改变解析器,实际上你可以,但它太重了,你最好使用正则表达式.
我知道这是一个陈词滥调的答案,这一切都归结为你的确切需求,但从你所说的,我个人可能会带着一袋正则表达式.
作为替代方案,正如Vaibhav所说,如果你有几种不同的情况可以出现并且你可以轻松地检测出哪一种,你可以制作一个选择正确算法的插件系统,这些算法可能都非常不同,一个在尖尖的情况下使用Lex / Yacc,另一个在更简单的情况下使用IndexOf和regex.