如何在另一个字符串中找到长度可变的字符串

时间:2019-07-31 11:41:31

标签: regex vbscript

我正在尝试编写一些正则表达式,该正则表达式将从字符串中提取2-3个alpha宪章。 这是字符串“ 01EY003-P3 MOTOR STOP”的示例。我需要从此特定字符串中获取“ E”和“ Y”。字符始终以2个数字字符开头。 “ Y”所在的位置最多可以包含3个字符。所需字符也可以在字符串中的任何位置。因此该字符串可能类似于“ P3 MOTOR STOP,01EYAQ003”。

这是一些示例数据。左侧的源字符串的一些示例,以及右侧要提取的内容。

“ 01FT108-TMPRD油流E944A”-FT
“ 01FIT110-从E101外壳冲洗”-FIT
“ 01FC111-CUTTER FR P21 / 22 FLOW”-FC
“ 01FC112-P6A E946头流”-FC
“ 01FT113-TMPRD油流E946A”-FT
“ 5 TAR LINE FLOW- 01FT005”-FT

感谢您的帮助。我一直在搜索旨在学习正则表达式的论坛,因为我从来没有使用过它,所以我对此感到非常恐惧。

我将此正则表达式嵌入vb脚本中。因此,我尝试使用一些简单的正则表达式“ [a-zA-Z]”。然后使用代码进行计算,因为我对reg ex感到非常不好。

这是我将要使用正则表达式的地方。我对vbscript很好,这只是一个小测试。

Sub Test_Execute(Batch)
Dim objRE, objMatch, i 
Stop
    Set objRE = New RegExp
    objRE.Pattern    = "[a-zA-Z]"
    objRE.Global = True
    objRE.IgnoreCase = True
    Set objMatch = objRE.Execute(Document.DwgTitleLine2)
    For i = 0 To 5
        If objRE.Test(objMatch(i).value)Then
            WinMsgBox "First Char True"
        Else
            WinMsgBox "First Char False"    
        End If 
    Next

    End Sub

当我使用此代码时,使用我的简单正则表达式。每个循环仅带回Alpha字符。甚至“ P3电机停止”中的所有内容,我都不关心。显然是因为我在正则表达式中实际上没有任何规则。

1 个答案:

答案 0 :(得分:1)

您可以使用

(?:^|\s)\d{2}([a-zA-Z]+)

请参见regex demo

它匹配:

  • (?:^|\s)-字符串或空格的开头
  • \d{2}-两位数字
  • ([a-zA-Z]+)-第1组(match.Submatches(0)):1个以上的ASCII字母。

VBA:

Set objMatch = objRE.Execute(Document.DwgTitleLine2)
For Each m In objMatch
  Debug.Print m.Submatches(0)
Next