扫描序列号

时间:2017-04-24 17:13:22

标签: ms-access access-vba full-text-search

我在Access中有一些VBA代码可以扫描电子邮件正文中的特定序列号。序列号先前以2开头,后跟三个字母,然后是5个数字。我使用类似已发布代码的内容来搜索最常见的前缀。现在他们已经更改了序列号以消除2,并且使用我当前的方法,这使得更有可能抓取不正确的文本。 EMText是一个包含电子邮件正文的字符串。

新格式为ABC12345D1234,这几乎可以是字母或数字的任意组合,但字母总是字母,数字总是数字。有没有快速搜索具有此特定长度和字母和数字或特定格式的内容的方法。我无法想出一些我自己并不过分复杂的东西,而且无法找到符合我要做的事情的例子。

Function GetUnitNumber(ByVal EMText) As String

    unit = ""

If InStr(1, EMText, "2ABC") Then

    vItem = Split(EMText, "2ABC")
    unit = "2ABC" & Left(vItem(1), 5)

ElseIf (InStr(1, EMText, "2CA")) Then

    vItem = Split(EMText, "2CA")

    unit = "2CA" & Left(vItem(1), 6)

ElseIf (InStr(1, EMText, "2DFS")) Then.......

1 个答案:

答案 0 :(得分:1)

这是正则表达式的典型场景。

链接到Microsoft VBScrpt正则表达式

并使用此:

Function GetUnitNumber(ByVal EMText)

Dim regEx As New RegExp

With regEx
    .Global = True
    .MultiLine = True
    .IgnoreCase = True
    'This matches the pattern: i.e. ABC12345D1234 
    .Pattern = "[A-Z]{3}[0-9]{5}[A-Z]{1}[0-9]{4}"
End With

If regEx.Test(EMText) Then
    GetUnitNumber = regEx.Execute(EMText)(0)
End If

End Function