2017-04-24 58 views
0

我在Access中有一些VBA代码,用于扫描特定序列号的电子邮件正文。序列号先前以2开头,接着是3个字母,然后是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....... 
+0

你为什么要抢不正确的文本?你是不是认为“使得正确的文本更加困难”? – June7

回答

1

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

链接到微软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