如何解决C#中的ACH模式匹配
我正在开发自动清算所(ACH)应用程序,并且正在进行文件验证。
第一次验证需要验证ACH文件是否具有正确的记录类型模式。
模式是这样的
1 - File Record Header
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
9 - File Control Record
数字是记录类型或该行的第一个字符。文字描述了记录类型。
我要测试文件是否遵循上述模式。
包括以下内容的一些变体。
不需要附录记录
1 - File Record Header
5 - Batch Record Header
6 - Entry Detail Record
8 - Batch Control Record
9 - File Control Record
文件可以具有一个或多个批次。
1 - File Record Header
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
9 - File Control Record
文件记录头必须位于文件顶部,因此以下操作将失败...
5 - Batch Record Header
1 - File Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
9 - File Control Record
RegEx对此最合适吗?任何建议将不胜感激。
解决方法
根据您的描述,这听起来像是迷你DSL(特定于域的语言)的工作。尽管RegEx将是对输入进行标记化的良好开端,但我认为规则对于常规语言而言可能过于复杂。我将使用某种上下文无关的语法(CFG)来表示语法,并编写一个解析器以确保正确遵循规则。在这种情况下,我不会完全依靠RegEx。
您已经为DSL定义了很好的规则集-下一步将其转换为词汇和句法语法。该方法类似于编译器的前端部分的方法-直至抽象语法树(AST),您可以对其进行完全验证。根本没有后端(优化或代码生成)-一旦您验证了已解析的树,要么语法错误(因此,输入被拒绝),要么结构正确(因此,输入被接受)。
您可以利用诸如ANTLR之类的语言识别工具来更快地进行操作。
,我同意CoolBots,但是,如果您确实想要大量令人作呕的正则表达式,则应根据我对您的要求的理解来起作用:
1 - File Record Header\n(5 - Batch Record Header\n6 - Entry Detail Record\n(7 - Addenda Record\n)?8 - Batch Control Record\n)+9 - File Control Record\n?
以下是带有示例的正则表达式测试器的链接: https://regexr.com/5a7ti
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。