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

How to find a string of characters, of a variable length within another string

我正在尝试编写一些正则表达式,从一个字符串中提取 2 - 3 个 alpha 章程。 这是字符串“01EY003 - P3 MOTOR STOP”的示例。 "E" & "Y" 是我从这个特定字符串中需要的。字符前面总是有 2 个数字字符。在 "Y" 所在的位置,最多可以包含 3 个字符。所需的字符也可以位于字符串中的任何位置。所以字符串可能类似于 "P3 MOTOR STOP, 01EYAQ003"。

这是一些样本数据。左边是源字符串的一些例子,右边是我要提取的内容。

“01FT108 - TMPRD 油流量 E944A”- FT
“01FIT110 - 从 E101 刷新 SHELL”- FIT
“01FC111 - 切刀 FR P21/22 流量”- FC
“01FC112 - P6A E946 HEADER 流量” - FC
“01FT113 - TMPRD 油流量 E946A”- FT
“5 TAR LINE FLOW- 01FT005”-金融时报

感谢任何帮助。我一直在搜索论坛试图学习正则表达式,因为我从来没有用过它,所以我很不擅长它。

我将这个正则表达式嵌入到 vb 脚本中。所以我尝试使用一些简单的正则表达式“[a-zA-Z]”。然后使用代码进行计算,因为我对 reg ex 很不满意。

这是我将要使用正则表达式的地方。我很擅长 vb 脚本,这只是一个小测试。

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

当我用我的简单正则表达式使用这段代码时。每个循环都只带回字母字符。甚至 "P3 MOTOR STOP" 中的所有内容,我都不关心。显然是因为我在正则表达式中几乎没有规则。

您可以使用

(?:^|\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