Need a regex pattern to find a string between two strings

peispud
peispud used Ask the Experts™
on
Hi
I am looking to get the customer's name  from a multi-page computer generated document.  In these documents, then name of the customer always follows the pattern shown below.  


1) Customer Information                  ----- (string constant)
2) Customer                                       ------ (string constant)
3) Customer Name                           ------ (information being sought)
4) Contact Telephone Number ----------  (string constant)

It actually looks like this in the document.  There is a line feed after each string constant  and customer name.

Customer Information
Customer
John Doe
Contact telephone number


There would only be one instance of a customer per document. Could someone help me with the regex pattern please.  

Thank you.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2016

Commented:
Hi,

pls try EDITED
Customer\n(.*)\nContact Telephone Number

Open in new window

REgards

Author

Commented:
Nope..  it didn't work for me.

Just in case, I will include the code.  Perhaps I've got something else wrong.

 Public Function ExtractTMIData(ByVal strXX As String) As Ticket()
    Dim reg As New regExp
'    reg.Pattern = "Customer Information\s+Customer"
    reg.Pattern = "Customer\n(.*)\nContact Telephone Number"
    reg.Global = True
    reg.IgnoreCase = True
    Dim Matches As MatchCollection
    Set Matches = reg.Execute(strXX)
End Function

Open in new window

Top Expert 2016

Commented:
Maybe replace \n with \n\r
Bootstrap 4: Exploring New Features

Learn how to use and navigate the new features included in Bootstrap 4, the most popular HTML, CSS, and JavaScript framework for developing responsive, mobile-first websites.

Top Expert 2016

Commented:
then try
 Public Function ExtractTMIData(ByVal strXX As String) As Ticket()
    Dim reg As New regExp
'    reg.Pattern = "Customer Information\s+Customer"
    reg.Pattern = "Customer\n\r(.*)\n\rContact Telephone Number"
    reg.Global = True
    reg.IgnoreCase = True
    Dim Matches As MatchCollection
    Set Matches = reg.Execute(strXX)
ExtractTMIData = Matches(0).SubMatches(0)
End Function

Open in new window

Top Expert 2016

Commented:
Could you send a dummy file?

Author

Commented:
Nope.  

The last command
ExtractTMIData = Matches(0).SubMatches(0)

Open in new window

generated an error code.  
Even with this commented out,  I did not get the customer name.

Author

Commented:
Ok..  here is a file with the important information changed.

I need to extract "John Doe"

Author

Commented:
Oops... Here is the file
Test.docx
Top Expert 2016
Commented:
then try
 Public Function ExtractTMIData(ByVal strXX As String) As String
    Dim reg As New regExp
'    reg.Pattern = "Customer Information\s+Customer"
     reg.Pattern = "Customer\r(.*?)\rContact telephone number"
    reg.Global = True
    reg.IgnoreCase = True
    Dim Matches As MatchCollection
    Set Matches = reg.Execute(strXX)
ExtractTMIData = Matches(0).SubMatches(0)
End Function

Open in new window

Commented:
RegexBuddy says this should work:

reg.Pattern  = "Customer\r?\n(.*)"

Open in new window


HTH,
Dan

Commented:
Dim myMatch As Match
Dim myMatches As MatchCollection
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "Customer\r?\n(.*)"
Set myMatches = myRegExp.Execute(SubjectString)
For Each myMatch In myMatches
	'matched text: myMatch.Value
	'match start: myMatch.FirstIndex
	'match length: myMatch.Length
	'backreference n text: myMatch.SubMatches(n-1)
Next

Open in new window


This is for VB6.

Author

Commented:
Thank you both for your help.

This is awesome!!

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial