Avatar of MrDavidThorn
MrDavidThorn

asked on 

Regular expressions in VBA, search for more than one ASCII Code

Hi Folks, should be some easy points up for grabs here, Im using regular expressions 5.5 to search and replace a string based on ASCII codes, I have created a procedure that calls the regexe code and replaces the ASCII Code with whitespace, If I want to search and replace two codes I currently call the procedure twice, when Im guessing that I can somehow edit the pattern to search for two codes, any examples would be great.
Sub Checkfile()
Dim FSO As New FileSystemObject
Dim fsoFile As File
'Open an XML file to search for illegal characters
Set SourceFile = FSO.OpenTextFile("C:\TestWithInvalidCharcter.xml")
'Create a new XML file that would not contain new xml file
FSO.CreateTextFile ("C:\Test.xml")
fnum = FreeFile()
Open "C:\Test.xml" For Append As fnum

Do While Not SourceFile.AtEndOfStream
    'replace any ascii code 240 with whitespace and print to the file
    Print #fnum, TestRegExp("\240 040", SourceFile.ReadLine)
        'replace any ascii code 040 with white space and print to the file
    Print #fnum, TestRegExp("\040", SourceFile.ReadLine)
Loop
Close fnum


End Sub
Function TestRegExp(myPattern As String, myString As String)
   'Create objects.
   Dim objRegExp As RegExp
   Dim objMatch As Match
   Dim colMatches   As MatchCollection
   Dim RetStr As String
   
   ' Create a regular expression object.
   Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.
   objRegExp.Pattern = myPattern

   ' Set Case Insensitivity.
   objRegExp.IgnoreCase = True

   'Set global applicability.
   objRegExp.Global = True
   'Test whether the String can be compared.
   If (objRegExp.Test(myString) = True) Then

   'Get the matches.
    Set colMatches = objRegExp.Execute(myString)   ' Execute search.

    For Each objMatch In colMatches   ' Iterate Matches collection.
           RetStr = objRegExp.Replace(myString, " ")
    Next
   Else
    RetStr = myString
   End If
   TestRegExp = RetStr
End Function

Open in new window

Regular ExpressionsVB Script

Avatar of undefined
Last Comment
kaufmed
Avatar of kaufmed
kaufmed
Flag of United States of America image

If I understand your question correctly, then I believe what you want is to use the vertical bar (meaning "OR"):
Print #fnum, TestRegExp("\240|\040", SourceFile.ReadLine)

Open in new window

Avatar of MrDavidThorn
MrDavidThorn

ASKER

thanks that works! - is there a AND condition as well?
MrDavidThorn,

Please explain what requirement you would have vis-a-vis an AND condition.  I should think that you would control this by passing in the proper pattern, but perhaps I misunderstand.

You may also want to have a look at my article on using RegExp in VBA and VB6:

https://www.experts-exchange.com/Programming/Languages/Visual_Basic/A_1336-Using-Regular-Expressions-in-Visual-Basic-for-Applications-and-Visual-Basic-6.html

Patrick
ASKER CERTIFIED SOLUTION
Avatar of kaufmed
kaufmed
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of kaufmed
kaufmed
Flag of United States of America image

Another, less tedious, approach would be to use a positive lookahead for each option. If you use this construct, then you only have to include each option once:
^(?=.*?\240)(?=.*?\040)

Open in new window

VB Script
VB Script

VBScript (Visual Basic Scripting Edition) is an interpreted scripting language developed by Microsoft that is modeled on Visual Basic, but with some important differences. VBScript is commonly used for automating administrative and other tasks in Windows operating systems (by means of the Windows Script Host) and for server-side scripting in ASP web applications. It is also used for client-side scripting in Internet Explorer, specifically in intranet web applications.

39K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo