什么是最佳的方式的分析字符串?[关闭]
-
09-06-2019 - |
题
我们已经有了一个方案,要求我们解析大量的电子邮件(平文),每个电子邮件'type'的结果是剧本正在运行,对各种平台。有些是分隔的标签,有些是空间分隔,一些我们只是不知道呢。
我们需要支持更多的'格式'的未来。
我们要去一个解决方案使用:
- Regex
- 简单地检索字符串中(使用的字符串。个等)
- Lex/Yacc
- 其他的
总体解决方案将是开发在C#2.0(希望3.5)
解决方案
这三个解决方案说明每个涵盖非常不同的需要。
手册分析 (简单的文本搜索)是最为灵活和适应性最强的,但是,它很快成为一个真正的屁股痛作为分析所需要的是更加复杂。
Regex 是一个中间地带,并且可能是你最好的选择在这里。他们强大,但灵活,因为你可以自己添加更多逻辑的代码拨打的不同regex.主要缺点将会加速在这里。
Lex/Yacc 真的只是适合于非常复杂的、可预见的语法和缺乏一个很大的员额编制的灵活性。你不能轻易改变的分析器在中期分析,以及实际上你可以,但它只是太重,你会更好地使用regex代替。
我知道这是一种陈词滥调 答案, ,这一切都真正归结为什么你的确切需求,但是从什么你说,我会亲自去一袋regex.
作为一个 替代, 如崴巴吾poionted出,如果有若干不同的情况下,可能会出现,你《儿童和青少年法典》很容易地查出哪一个是来了,你可以做一个插件系统中选择正确的算法,这些算法,可能都是非常不同,一是使用Lex/Yacc在尖尖的案例和其他使用个和regex用较简单的案件。
其他提示
Regex.
Regex可以解决几乎一切,除了对于世界和平。那也许是世界和平。
你也许应该有一个可插入系统,而不管其类型字符串分析使用。因此,这个系统的呼吁的权利'的插件'取决于该类型的电子邮件来分析它。
你必须建筑师你的解决方案可更新,这样就可以处理未知的情况下,当他们的作物。创建一个接口,用于分析程序,不仅包含的方法分析电子邮件和返回的结果在一个标准的格式,但是也对审查电子邮件,以确定如果分析程序,将执行。
在你的配置,识别类型的分析器你希望使用,设其结构的选项,而配置的标识符,确定如果分析将作为或不行。名称的分析程序,由组件合格的名称以便将类型的实例化可以在运行时甚至如果没有静态链接到他们的议会。
标识能够实现一个接口,这样你就可以创造不同类型的检查针对不同的事情。例如,可以创建一个regex标识符,分析电子邮件的特定模式。确保让尽可能多的信息可用于标识符,以便它可以作出决定的事情就像从地址以及内容的电子邮件。
当你知道的分析程序不能处理工作,创建一个新的DLL类型实行的分析程序和标识的界面,可以处理的工作,并减少他们在你的站目录。
这取决于你的分析。任何超出了什么Regex可以处理,我一直使用 这些代码.你之前跳进recursive裔分析的第一次,我想研究它们如何工作,在试图使用一个框架,像这一个。如果订阅MSDN杂志,检查日2008年的问题,他们有一篇文章编写一个从零开始。
一旦你得到了理解,学习这些代码将是一吨更加容易。还有其他框架,但这些代码似乎具有最大社区支持和公开文档。提交人还出版了 明确这些代码参考:建设领域-特定语言.
Regex很可能是你生物多样性和生态系统服务的赌注,尝试和证明。外加一个经常的表达可以编制。
你最好的赌注是RegEx,因为它提供了一个更大程度的灵活性比任何其他选项。
同时你可以用 IndexOf
处理年轻人,你可能会很快找到自己写的代码看起来像:
if(s.IndexOf("search1")>-1 || s.IndexOf("search2")>-1 ||...
可以处理在一个RegEx发言。另外,还有很多这样的地方 RegExLib.com 你在哪里可以找到人共享经常表达式来解决问题。
@Coincoin已复盖基地;我只想补充一点,与regex这是特别容易,结束了难以读,难以维护的代码。Regex是一个强大的和非常紧凑的语言,因此,这是它经常去。
使用的空白和评论的内regex可以很长的路要走,以使其更易于维护regex.埃里克Gunnerson我对这一想法。这里的 一个例子.
使用PCRE.所有其他的答案只是第2好的。
与信息提供,我会选择Regex.
但是,什么样的你想要的信息,分析和什么你想要做将会改变决定Lex/Yacc也许..
但是它看起来像你已经做了你的头脑与串的搜索:)