We help IT Professionals succeed at work.

Need a regex pattern to find a string between two strings

peispud
peispud asked
on
1,652 Views
Last Modified: 2017-03-21
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

CERTIFIED EXPERT
Top Expert 2016

Commented:
Hi,

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

Open in new window

REgards
peispudTech

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

CERTIFIED EXPERT
Top Expert 2016

Commented:
Maybe replace \n with \n\r
CERTIFIED EXPERT
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

CERTIFIED EXPERT
Top Expert 2016

Commented:
Could you send a dummy file?
peispudTech

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.
peispudTech

Author

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

I need to extract "John Doe"
peispudTech

Author

Commented:
Oops... Here is the file
Test.docx
CERTIFIED EXPERT
Top Expert 2016
Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION
IT Consultant
CERTIFIED EXPERT
Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION
Dan CraciunIT Consultant
CERTIFIED EXPERT

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.
peispudTech

Author

Commented:
Thank you both for your help.

This is awesome!!