From: Raj on 1 May 2010 17:08 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 1 May 2010 17:32 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 1 May 2010 19:17 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 1 May 2010 19:52 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 1 May 2010 20:19
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 |