|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Regex referencesprobably 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. 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. > 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 You need to create a Match object.> 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. 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 > 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. 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. >
Count Instances Of String Within String
Large text file import: MVP question Clearing a custom array Removing array entry so cumbersome?? Declaring a garbage collector Accessing SQL dataset value from button NULL Value - Specified cast is not valid array operators Beginner- 2 Forms & Events Using Streamreader with files in servers |
|||||||||||||||||||||||