在文本中搜索模式并替换VB.NET中的整个模式

时间:2014-10-17 18:06:55

标签: regex vb.net zpl-ii

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

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

例如,我需要找到media darkness命令,^ 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

0 个答案:

没有答案