繁体   English   中英

VBA 正则表达式替换循环

[英]VBA Regex Replace Loop

当前在用于票务系统格式的正则表达式替换循环方面存在问题

我正在测试一段代码,它将正则表达式匹配票号的特定格式。 票号格式为“INC01234567”(最多8位数字)。 “INC”可以是可选的,这样用户只需输入结束编号(IE 1234567),循环将添加额外的“0”以提供最多 8 位的数字。 但是,目前我遇到了一个数学逻辑问题,如果您输入完整的票号,它会在结果中添加一个太多的 0。

一世

Sub Incident()
Dim sInc As String  'Incident Number Field
Dim strPattern As String: strPattern = "^(?:INC|NC|C)?([0-9]{1,8}$)"
Dim strReplaceINC As String: strReplaceINC = "$1"
Dim regEx As New RegExp
Dim strInput As String
Dim IncResult As Boolean

Do
    If strPattern <> "" Then

        strInput = inputbox("Input Incident Number", "Ticket Number")

        If strInput = vbNullString Then
            Exit Sub
        End If

        IncResult = False

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = True
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            sInc = regEx.Replace(strInput, strReplaceINC)
            Dim L As Integer: L = Len(sInc)
            Do
                sInc = "0" & sInc
                L = L + 1
            Loop While L <= 8
            sInc = "INC" & sInc
            IncResult = True
            'sInc = strInput
        Else
            MsgBox ("Please input a valid ticket number format")
            IncResult = False
        End If
    End If

Loop While IncResult = False
MsgBox (sInc)
End Sub

循环是不必要的开销,只需使用Format()

替换所有这些:

Dim L As Integer: L = Len(sInc)
Do
    sInc = "0" & sInc
    L = L + 1
Loop While L <= 8
sInc = "INC" & sInc

有了这个:

sInc = "INC" & Format(sInc, "00000000")

您在循环结束时检查条件,这意味着循环将始终至少运行一次,无论 sInc 的长度如何。

只需更换:

Do
    sInc = "0" & sInc
    L = L + 1
Loop While L <= 8

和:

While L < 8
    sInc = "0" & sInc
    L = L + 1
Wend

正则表达式"^(?:INC|NC|C)?([0-9]{1,8}$)"确实匹配了一个 8 位的票号 012345678,不是吗? 所以If regEx.Test(strInput) Then将是真的,并且do..loop至少在它中断之前do..loop运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM