
Let us assume I have a string like this:
593 578 xxx 38 sss 384 KKK 44
OR
593-578-xxx-38-sss-384-KKK-44 (patterns separated by hyphen or minus)
The string has random numbers and some patterns like xxx, sss and KKK. I want to extract the patterns only from the string. Like,
xxx
sss
KKK
There two different ways you can do this.
1) Create RegExp Object
In the 1st method I’ll use the CreateObject() method to create a RegExp object.
Option Explicit
Private Sub getPattern()
Dim rE As Object, str As String
Set rE = CreateObject("VBScript.RegExp") ' Create object.
With rE
.IgnoreCase = True
.Global = True
.Pattern = "([a-zA-Z])\1+" ' Assign a regex pattern.
End With
str = "593 578 xxx 38 sss 384 KKK 44" ' The string to look for the patterns.
' For the matching patterns.
Dim myMatches As MatchCollection
Dim myMatch As Match
Set myMatches = rE.Execute(str) ' Execute the string
' Print the patterns from the string.
For Each myMatch In myMatches
Debug.Print myMatch.Value
Next
End SubOutput

2) Add Regular Expressions 5.5 Reference
In the 2nd method, we’ll add a "reference" of Regular Expressions in our VBA project to access methods and properties.
Therefore, 1st add a reference.
In your VBA editor, select Tools from the top menu and click References.
Find Microsoft VBScript Regular Expressions 5.5 library, select it (or check it) and press OK.
Here’s the macro to extract patterns from string.
Option Explicit
Private Sub getPattern()
Dim str As String
str = "593 578 xxx 38 sss 384-KKK-44" ' The string with the patterns
Dim rE As regExp
Set rE = New regExp
Dim myMatches As MatchCollection
Dim myMatch As Match
With rE
.IgnoreCase = True
.Global = True
.Pattern = "([a-zA-Z])\1+" ' Assign a regex pattern.
End With
Set myMatches = rE.Execute(str) ' Execute the string
For Each myMatch In myMatches
Debug.Print myMatch.Value
Next
End SubSame result, but different methods.
The methods may be different; however, the RegEx pattern is similar in both the examples.
.Pattern = "([a-zA-Z])\1+"
Let me explain RegExp.
• ([a-zA-Z]): It’s a range for both lower and upper case alphabets from a to z. We are looking for alphabets.
• \1+: Matches and returns the result in a "group". (if you remove this pattern, it will return values separately)
Note: You can test regular expressions here.
