我正在尝试编写一些正则表达式,该正则表达式将从字符串中提取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电机停止”中的所有内容,我都不关心。显然是因为我在正则表达式中实际上没有任何规则。
答案 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