Home All Groups Group Topic Archive Search About
Author
8 May 2006 2:34 AM
spamsickle
I have a Perl background, so some of what I know in other contexts is
probably getting in the way of what I need to learn now.  With that
said, I'm having a problem getting my regex to work as I expect.  I
have a string value like "John Q Public" in a textbox called "Name",
and I want to use the regex to split out first name and last name.
Here's what I've coded:

        Dim FirstName As String
        Dim LastName As String
        If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
Then
            FirstName = $1
            LastName = $3
        End If

but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
invalid characters.

My hunch is that $1 and $3 only make sense inside the Regex namespace,
but I'm not sure what my next step should be.  Do I need to create a
Match object to access the values?  All the examples I've found on the
web seem to assume that the only reason you'd want to extract values is
to re-arrange them in a replace, but that's not what I have in mind.

Author
8 May 2006 5:54 AM
Cor Ligthert [MVP]
SpamSimple,

Why don't you use in this case
LastIndexOf(char)

http://msdn2.microsoft.com/en-us/library/0w96zd3d.aspx

And then the substring

The Regex is not the fastest method in Net.

I hope this helps,

Cor


<spamsickle@gmail.com> schreef in bericht
Show quoteHide quote
news:1147055656.872513.43390@g10g2000cwb.googlegroups.com...
>I have a Perl background, so some of what I know in other contexts is
> probably getting in the way of what I need to learn now.  With that
> said, I'm having a problem getting my regex to work as I expect.  I
> have a string value like "John Q Public" in a textbox called "Name",
> and I want to use the regex to split out first name and last name.
> Here's what I've coded:
>
>        Dim FirstName As String
>        Dim LastName As String
>        If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
> Then
>            FirstName = $1
>            LastName = $3
>        End If
>
> but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
> invalid characters.
>
> My hunch is that $1 and $3 only make sense inside the Regex namespace,
> but I'm not sure what my next step should be.  Do I need to create a
> Match object to access the values?  All the examples I've found on the
> web seem to assume that the only reason you'd want to extract values is
> to re-arrange them in a replace, but that's not what I have in mind.
>
Author
8 May 2006 8:34 AM
david
On 2006-05-08, spamsickle@gmail.com <spamsickle@gmail.com> wrote:
Show quoteHide quote
> I have a Perl background, so some of what I know in other contexts is
> probably getting in the way of what I need to learn now.  With that
> said, I'm having a problem getting my regex to work as I expect.  I
> have a string value like "John Q Public" in a textbox called "Name",
> and I want to use the regex to split out first name and last name.
> Here's what I've coded:
>
>         Dim FirstName As String
>         Dim LastName As String
>         If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
> Then
>             FirstName = $1
>             LastName = $3
>         End If
>
> but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
> invalid characters.
>
> My hunch is that $1 and $3 only make sense inside the Regex namespace,
> but I'm not sure what my next step should be.  Do I need to create a
> Match object to access the values?  All the examples I've found on the
> web seem to assume that the only reason you'd want to extract values is
> to re-arrange them in a replace, but that's not what I have in mind.

You need to create a Match object.

    Dim m As Match = Regex.Match(NameTextBox.Text, pattern)

    If m.Success Then
        FirstName = m.Groups(1).Value
        LastName = m.Groups(3).Value

PS.  .Net has some nice additions for regex such as named capture and
non-capture, consider:

(?<firstName>^\w+)\s(?:\w\s)?(?<lastName>\w+)$

' Now you can use
    FirstName = m.Groups("firstName").Value










Show quoteHide quote
>
Author
8 May 2006 1:53 PM
housebuyer
Thanks to everyone who posted, it's working like a charm now.

The main reason I'd been using Perl was for the regex capabilities, and
I still prefer it for my scripting work.  For interactive applications
like the one I'm tackling now, however, I found Perl/Tk to be a lot
more difficult to use than the .NET IDE.  I think going forward, a
significant number of the applications that I would have formerly done
in Perl are going to be done with .NET.

Thanks again to all.
Author
8 May 2006 8:37 AM
Göran_Andersson
The IsMatch method only checks for a match, it doesn't store the
matches. The $ references are only used in a replacement string.

Use the Match method to get a Match object. The Groups property in the
Match object is a collection of the captures.


spamsickle@gmail.com wrote:
Show quoteHide quote
> I have a Perl background, so some of what I know in other contexts is
> probably getting in the way of what I need to learn now.  With that
> said, I'm having a problem getting my regex to work as I expect.  I
> have a string value like "John Q Public" in a textbox called "Name",
> and I want to use the regex to split out first name and last name.
> Here's what I've coded:
>
>         Dim FirstName As String
>         Dim LastName As String
>         If Regex.IsMatch(NameTextBox.Text, "(^\w+)\s(\w\s)?(\w+)$")
> Then
>             FirstName = $1
>             LastName = $3
>         End If
>
> but the the VB 2005 Express IDE is telling me the $ in $1 and $3 are
> invalid characters.
>
> My hunch is that $1 and $3 only make sense inside the Regex namespace,
> but I'm not sure what my next step should be.  Do I need to create a
> Match object to access the values?  All the examples I've found on the
> web seem to assume that the only reason you'd want to extract values is
> to re-arrange them in a replace, but that's not what I have in mind.
>