0

我一直在从互联网上收集有关如何通过一串文本查找模式并将其替换为其他内容的信息。

我刚刚开始了解 RegEx 以及如何使用它们,因为我认为它最适合我对应用程序的需求。基本上我需要做的是查看从文本文件中读取的字符串,该文件可能包含多达 3 个 ZPL II 标签定义,并替换一些命令/参数,然后将所有数据传递给无线标签打印机。

例如,我需要找到 media dark 命令,^MDxx,其中 xx 是一个整数,它将设置打印标签的深度。xx 可以是负数、正数,最多但不总是 2 位数字(范围从 -30 到 30)。因此,一个特定的 ^MD 命令可以是 4 到 7 个字符,并且对于我正在处理的每个标签定义可能会有所不同。我需要用 ^MD-13 替换所有这三个命令。

这是我根据我的研究提出的代码,我很想知道我是否做错了什么或是否需要进行任何调整。

Public Function ProcessLabelString(strInput As String) As String
    Dim strZPL As String = strInput

    Try
        Dim lstPatterns As New Dictionary(Of String, String)
        'media tracking ^MNa,b - look for ^MN followed by a single letter, and optionally a comma followed by another letter
        lstPatterns.Add("\^MN[A-Za-z](\,[A-Za-z])?", "")
        'media darkness ^MDa - look for ^MD followed by an optional dash (for negative value) and up to two digits (valid values are -30 to 30)
        lstPatterns.Add("\^MD\-?\d{1,2}", "^MD-13")
        'label home ^LHx,y - look for ^LH followed by up to a five digit number, a comma, and another number up to five digits (valid values are 0 to 32000)
        lstPatterns.Add("\^LH\d{1,5},\d{1,5}", "^LH5,0")
        'print rate ^PRa,b,c - look for ^PR followed by up to two letters/numbers, and two optional sets of a comma with up to two letters/numbers (valid values for all three parameters are A-E or 1-14)
        lstPatterns.Add("\^PR[A-Ea-e0-9]{1,2}(\,[A-Ea-e0-9]{1,2})?(\,[A-Ea-e0-9]{1,2})?", "^PR2")
        Dim regExp As System.Text.RegularExpressions.Regex

        For Each pattern In lstPatterns
            regExp = New System.Text.RegularExpressions.Regex(pattern.Key)
            strZPL = regExp.Replace(strZPL, pattern.Value)
        Next
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

    Return strZPL
End Function

其中 strInput 参数是一个包含 ZPL II 文件内容的字符串(因此它可以包含 1 到 3 个标签)。我确实知道这些命令将始终存在,只是没有针对我正在使用的无线打印机进行正确设置。

编辑:以下是可以使用此逻辑处理的示例 ZPL 文件。通常有更多的 ^FO 命令,但由于它包含敏感信息,我复制并替换了一些命令(它们都是相似的命令,只是文本值不同)。

~JO
^XA^EG^XZ
^XA
^PMN
^MNY                             'need to find this
^MMT
^MTD
^MD20                            'need to find this
^LH10,10                         'need to find this
^LL1119
^PR6                             'need to find this
^JMA
^FO2,492^FR^GB785,2,2^FS
^FO8,725^FR^GB785,12,12^FS
^FO8,864^FR^GB785,2,2^FS
^FO8,1091^FR^GB785,12,12^FS
^FO275,492^FR^GB2,232,2^FS
^FO51,51^CI0^A0N,26,22^FR^FDCustomerName^FS
^FO51,81^CI0^A0N,26,26^FR^FDCompanyName^FS
^FO51,111^^CI0^A0N,26,26^FR^FDPhoneNumber^FS
^FO51,142^CI0^A0N,26,26^FR^FDAddress^FS
^FO51,173^CI0^A0N,26,26^FR^FDCityStateZip^FS
^PQ1
^XZ
~JO
^XA^EG^XZ
^XA
^PMN
^MNY                             'need to find this
^MMT
^MTD
^MD30                            'need to find this
^LH0,0                           'need to find this
^LL1219 
^PR6                             'need to find this
^JMA
^FO341,51^FR^GB2,195,2^FS
^FO51,248^FR^GB709,2,2^FS
^FO61,1172^FR^GB709,2,2^FS
^FO467,250^FR^GB2,171,2^FS
^FO61,538^FR^GB709,2,2^FS
^FO508,538^FR^GB2,293,2^FS
^FO61,417^FR^GB709,2,2^FS
^FO61,831^FR^GB709,2,2^FS
^FO51,51^CI0^A0N,26,22^FR^FDCustomerName^FS
^FO51,81^CI0^A0N,26,26^FR^FDCompanyName^FS
^FO51,111^^CI0^A0N,26,26^FR^FDPhoneNumber^FS
^FO51,142^CI0^A0N,26,26^FR^FDAddress^FS
^FO51,173^CI0^A0N,26,26^FR^FDCityStateZip^FS
^PQ1
^XZ
4

0 回答 0