From: Raj on
I have made another post before Ron's last post. I have explained the
requirement with an example.

Regards,
Raj



On May 2, 1:43 am, Ron Rosenfeld <ronrosenf...(a)nospam.org> wrote:
> On Sat, 01 May 2010 21:08:01 +0200, Lars-Åke Aspelin <lar...(a)REMOOVEtelia.com>
> wrote:
>
> >Can't [\s\S] be replaced by . like this
> >(\d{15,16})(.*)
>
> >Lars-Åke
>
> Your suggestion will work IF and ONLY IF there are no line feeds or carriage
> returns in the cell.  In some flavors, there is an option to have Dot match
> newline, but such does not exist in VBA (or Javascript).
>
> If the OP, rather than wanting to extract everything to " ... the end of the
> string in the cell"  only wanted to extract everything to the end of the line,
> and ignore anything in the cell after a newline character, then (.*) would be
> appropriate.
> --ron

From: Rick Rothstein on
Just in case you are interested, here is some non-RegEx code that finds the
same part of your text (the result is returned in the variable named
TailEnd)...

Text = "NRK2D 986123456789312 Raffles Traders"
For X = 1 To Len(Text)
If Mid(Text, X, 15) Like String(15, "#") Then
TailEnd = Mid(Text, X + 15)
Exit For
End If
Next

--
Rick (MVP - Excel)



"Raj" <rspai9(a)gmail.com> wrote in message
news:c6942365-a8c5-4208-bb88-bf91e0628b05(a)p5g2000pri.googlegroups.com...
> To clarify, the regex should return " Raffles Traders" from the string
> below:
>
> NRK2D 986123456789312 Raffles Traders
>
> The regex (\d{15,16})([\s\S]*) is returning "986123456789312 Raffles
> Traders"
>
> Regards,
> Raj
>
>
>
> On May 2, 12:08 am, Lars-�ke Aspelin <lar...(a)REMOOVEtelia.com> wrote:
>> On Sat, 01 May 2010 14:47:46 -0400, Ron Rosenfeld
>>
>>
>>
>> <ronrosenf...(a)nospam.org> wrote:
>> >On Sat, 1 May 2010 05:39:32 -0700 (PDT), Raj <rsp...(a)gmail.com> wrote:
>>
>> >>Hi,
>>
>> >>The regular expression (\d{15,16}) matches a substring in a cell. I
>> >>want to extract the remaining part of the cell ie. from the character
>> >>after the matched substring till the end of the string in the cell
>> >>using a regular expression.
>>
>> >>Is it possible to do this?
>>
>> >>Thanks in advance for the help.
>>
>> >>Regards,
>> >>Raj
>>
>> >(\d{15,16})([\s\S]*)
>>
>> >will capture everything in the cell and after your "match" into Group 2
>>
>> >--ron
>>
>> Can't [\s\S] be replaced by . like this
>> (\d{15,16})(.*)
>>
>> Lars-�ke
>
From: Ron Rosenfeld on
On Sat, 1 May 2010 13:41:03 -0700 (PDT), Raj <rspai9(a)gmail.com> wrote:

>To clarify, the regex should return " Raffles Traders" from the string
>below:
>
>NRK2D 986123456789312 Raffles Traders
>
>The regex (\d{15,16})([\s\S]*) is returning "986123456789312 Raffles
>Traders"
>
>Regards,
>Raj

Obviously, you are not doing what I suggested which was to return the *SECOND*
matching group. You are returning the ENTIRE match. Here's an example as to
returning the *SECOND* match using VBA:

===============================
Option Explicit
Function Part2(s As String) As String
Dim re As Object, mc As Object
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(\d{15,16})([\s\S]*)"
If re.test(s) = True Then
Set mc = re.Execute(s)
Part2 = mc(0).submatches(1)
End If
End Function
==================================
--ron
From: Ron Rosenfeld on
On Sat, 1 May 2010 17:32:04 -0400, "Rick Rothstein"
<rick.newsNO.SPAM(a)NO.SPAMverizon.net> wrote:

>Just in case you are interested, here is some non-RegEx code that finds the
>same part of your text (the result is returned in the variable named
>TailEnd)...
>
>Text = "NRK2D 986123456789312 Raffles Traders"
>For X = 1 To Len(Text)
> If Mid(Text, X, 15) Like String(15, "#") Then
> TailEnd = Mid(Text, X + 15)
> Exit For
> End If
>Next
>
>--
>Rick (MVP - Excel)

Rick,

The OP's original regex (\d{15,16}) will capture the first 15 *OR 16* digit
string into capture group 1. So when the *rest* of the string is returned, it
will omit digit 16 if present.

Your code will return the 16th digit, if present, as a part of "TailEnd"
--ron
From: Rick Rothstein on
Okay, I wasn't entirely sure what the "15,16" meant in the pattern. If the
numbers are always followed by a space (is that what the "\s\S" part of your
expression is for?), my code could be modified to this...

Text = "NRK2D 3298613456378931 Raffles Traders"
For X = 1 To Len(Text)
If Mid(Text, X, 16) Like String(15, "#") & " " Then
TailEnd = Mid(Text, X + 15)
Exit For
End If
Next

--
Rick (MVP - Excel)



"Ron Rosenfeld" <ronrosenfeld(a)nospam.org> wrote in message
news:9hfpt5t32sem56v3n5ttmjfgbooo8mvta7(a)4ax.com...
> On Sat, 1 May 2010 17:32:04 -0400, "Rick Rothstein"
> <rick.newsNO.SPAM(a)NO.SPAMverizon.net> wrote:
>
>>Just in case you are interested, here is some non-RegEx code that finds
>>the
>>same part of your text (the result is returned in the variable named
>>TailEnd)...
>>
>>Text = "NRK2D 986123456789312 Raffles Traders"
>>For X = 1 To Len(Text)
>> If Mid(Text, X, 15) Like String(15, "#") Then
>> TailEnd = Mid(Text, X + 15)
>> Exit For
>> End If
>>Next
>>
>>--
>>Rick (MVP - Excel)
>
> Rick,
>
> The OP's original regex (\d{15,16}) will capture the first 15 *OR 16*
> digit
> string into capture group 1. So when the *rest* of the string is
> returned, it
> will omit digit 16 if present.
>
> Your code will return the 16th digit, if present, as a part of "TailEnd"
> --ron