Solved

Regular expression help

Posted on 2009-07-09
14
176 Views
Last Modified: 2013-11-07
Hello

Given a string that is in capitals, how could i convert the string so that only the first letter of every word was a capital and the rest was lower case.

There is an added complication that a have a list of certain words which would need to be made all lower case: on, upon, in

Also any words that contain a number must remain in capitals. This last one might seem odd but the input string in question is an address. Sometimes the county where someone lives is not available and is given as an abbreviated postcode.

MAny thanks
0
Comment
Question by:andieje
  • 5
  • 4
14 Comments
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 25042238
This is not done by regular expression. Regular expressions are used to match strings with patterns not to modify/process strings. You need to break up the address into individual words and then perform the manipulation. Let me know if you are still interested and i would try to produce some code.
0
 
LVL 38

Expert Comment

by:PaulHews
ID: 25043683
A hybrid method using regex and StrConv (from the VisualBasic namespace)
Imports System.Text.RegularExpressions

Public Class Form1
 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Debug.WriteLine(FormatCase("THIS IS MY STRING IN UPON BUT NOT UON CAPS."))

    End Sub
 

    Private Function FormatCase(ByVal Value As String) As String

        Dim Ret As String = StrConv(Value, VbStrConv.ProperCase)

        'Convert necessary words to lower case

        Ret = Regex.Replace(Ret, "\x20In|Upon|On\x20", AddressOf Eval)

        Return Ret

    End Function
 

    Private Function Eval(ByVal m As Match) As String

        Return m.Value.ToLower

    End Function
 

End Class

Open in new window

0
 
LVL 38

Expert Comment

by:PaulHews
ID: 25043767
Nevermind there's some glaring problems with that.
0
 
LVL 38

Accepted Solution

by:
PaulHews earned 500 total points
ID: 25043888
Better version:
Imports System.Text.RegularExpressions

Public Class Form1
 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Debug.WriteLine(FormatCase("3THIS IS MY 3STRING IN UPON INNIS BUT NOT UON CAPS IN."))

    End Sub
 

    Private Function FormatCase(ByVal Value As String) As String

        Dim Ret As String = StrConv(Value, VbStrConv.ProperCase)

        Debug.WriteLine(Ret)

        Ret = Regex.Replace(Ret, "\b\S*\d+\S*\b", AddressOf NumFix)

        'Convert necessary words to lower case

        Ret = Regex.Replace(Ret, "\b(In|Upon|On)\b", AddressOf Eval)

        Return Ret

    End Function
 

    Private Function Eval(ByVal m As Match) As String

        Return m.Value.ToLower

    End Function

    Private Function NumFix(ByVal m As Match) As String

        Return m.Value.ToUpper

    End Function
 

End Class

Open in new window

0
 

Author Comment

by:andieje
ID: 25249714
sorry for delay, i've been away. I will look at this question over the next day or so and close it. I already have a terrible work backlog i have to get though.

thanks for your patience
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:andieje
ID: 25249724
Please can i keep this open. I've been away but no i'm back. I have some things to catch up on but will give this my attention as soon as i can.
0
 

Author Comment

by:andieje
ID: 25260756
Many thanks, will look at it over the weekend
0
 

Author Comment

by:andieje
ID: 25268342
Hi Paul

That function looks great. What is that version of replace where you pass in the address of a function. I've never seen that before.

thanks
0
 
LVL 38

Expert Comment

by:PaulHews
ID: 25270365
It's the Replace overload that takes a MatchEvaluator delegate.  The function must take a match parameter and return a string to fit the signature of the MatchEvaluator delegate.

Regex.Replace Method (String, String, MatchEvaluator)
http://msdn.microsoft.com/en-us/library/ht1sxswy.aspx

It gives you a lot more flexibility in the replacement of elements than a straight string replace.

0
 

Author Closing Comment

by:andieje
ID: 31601510
many thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Access Web appliction 7 47
Resolve Dependency Issues 4 42
Error on Add method 1 37
Run a batch file when a Crystal Report is opened 5 12
Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
A short film showing how OnPage and Connectwise integration works.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now