2017-04-24 4 views
0

Ich habe einige VBA-Code in Access, die den Körper einer E-Mail für eine bestimmte Seriennummer scannt. Die Seriennummer begann zuvor mit einer 2 gefolgt von drei Buchstaben und dann 5 Zahlen. Ich habe so etwas wie den geposteten Code verwendet, um nach den häufigsten Präfixen zu suchen. Jetzt haben sie die Seriennummern geändert, um die 2 zu eliminieren, und das macht es bei meiner derzeitigen Methode viel wahrscheinlicher, falschen Text zu erfassen. EMText ist eine Zeichenfolge, die den E-Mail-Text enthält.Suche nach Seriennummern

Das neue Format ist ABC12345D1234 das kann so ziemlich jede Kombination von Buchstaben oder Zahlen sein, aber die Buchstaben sind immer Buchstaben und die Zahlen sind immer Zahlen. Gibt es eine schnelle Möglichkeit, nach etwas mit dieser spezifischen Länge und Anzahl von Buchstaben und Zahlen oder dem spezifischen Format zu suchen? Ich habe Probleme damit, etwas zu finden, das nicht allzu kompliziert ist und kein Beispiel finden kann, das zu dem passt, was ich versuche.

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

Warum wollen Sie falschen Text greifen? Meinst du "macht es viel schwieriger, richtigen Text zu finden"? – June7

Antwort

1

Dies ist ein typisches Szenario für reguläre Ausdrücke.

Link zu Microsoft VBScrpt Reguläre Ausdrücke

Und diese verwenden:

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