C# C语言中的ACH模式匹配

C# C语言中的ACH模式匹配,c#,pattern-matching,text-files,C#,Pattern Matching,Text Files,我正在开发一个自动清算所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 数字是记录类型或行的第一个字符。文本描

我正在开发一个自动清算所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来表达语法,并编写解析器以确保正确遵循规则。在这种情况下,我不会完全依赖正则表达式

您已经为您的DSL定义了一套非常好的规则-下一步就是将其转换为词汇和语法语法。该方法类似于编译器前端部分的方法—一直到抽象语法树AST,您可以完全验证它。这里没有后端优化或代码生成——一旦验证解析树,要么出现语法错误,输入被拒绝,要么结构正确,输入被接受


您可以利用语言识别工具,例如,加快速度。

我同意CoolBots,但是,如果您确实想要一个巨大的令人厌恶的正则表达式,这应该根据我对您的需求的理解:

1-文件记录头\n5-批记录头\n6-条目详细记录\n7-补遗记录\n?8-批控制记录\n+9-文件控制记录\n? 这里有一个指向正则表达式测试仪的链接,其中包含您的示例: