Replace text in the lines of a string in C#


Replace text in the lines of a string

This example uses the following code to replace text in the lines of a string.

private void btnGo_Click(object sender, EventArgs e)
{
    try
    {
        Regex reg_exp = new Regex(txtPattern.Text);
        lblResult.Text = reg_exp.Replace(
            txtInput.Text,
            txtReplacementPattern.Text);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

This code creates a Regex object, passing its constructor a regular expression pattern that will identify the text to replace. It calls the object’s Replace method, passing it the replacement pattern.

The trick lies in the search and replacement patterns. In this example, the search pattern is “(?m)^([^,]*), (.*)$”. The pieces of this expression have the following meanings:

Part Meaning
(?m) This is an option directive that indicates a multi-line string. This makes the ^ and $ characters match the beginning and end of a line rather than the beginning and end of the string.
^ Match the beginning of a line.
([^,]*) Match any character other than comma any number of times. This part is enclosed in parentheses so it forms the first match group.
, (A comma followed by a space.) Match a comma followed by a space.
(.*) Match any character any number of times. This part is enclosed in parentheses so it forms the second match group.
\r Match a carriage return. (In C# this isn’t part of the end of the line.)
$ Match the end of the line.

The replacement pattern is “$2 $1”. This says to output whatever was matched in the second match group, a space, and then the first match group.

This example takes this text:

    Archer, Ann
    Baker, Bob
    Carter, Cindy
    Deevers, Dan

And converts it into this:

    Ann Archer
    Bob Baker
    Cindy Carter
    Dan Deevers


Download Example   Follow me on Twitter   RSS feed   Donate




This entry was posted in regular expressions, strings and tagged , , , , , , , , , , , , . Bookmark the permalink.

6 Responses to Replace text in the lines of a string in C#

  1. OperatorX says:

    Rod,

    First – Thank you for the excellent site with such interesting and useful examples!

    Second – After building this example, I was not able to produce the same results that you describe in the post.

    The last name (Deevers, Dan) is not followed by a carriage return so it does not match. I was able to match all four names (producing the result that you included in the post) with the following regex:

    (?m)^([^,]*), ([^\r]*)(\r?)$

    Anyway, thank you again for sharing your knowledge!

    X

  2. Rod Stephens says:

    You’re absolutely correct! I didn’t notice the comma in the final line of output.

    I’ve updated the example to fix it. Thanks for pointing this out!

  3. Henk says:

    Hello Rod,

    Example a name: de Boer Rob with insertion de fails.

    Regards Henk

Leave a Reply

Your email address will not be published. Required fields are marked *