Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Beginning Regular Expressions 2005.pdf
Скачиваний:
95
Добавлен:
17.08.2013
Размер:
25.42 Mб
Скачать

Chapter 22

Next, a string variable, inputString, is declared:

string inputString;

Next, the value entered into textBox1 (the single line, upper text box) is assigned to the inputString variable:

inputString = this.textBox1.ToString();

Next, an object variable, myMatchCollection, is declared to inherit from the MatchCollection class. A MatchCollection object can contain zero or more Match objects. You populate the myMatchCollection variable using the myRegex variable’s Matches() method, supplying the inputString variable as the argument to the Matches() method:

MatchCollection myMatchCollection = myRegex.Matches(inputString);

Next, assign some literal text to the Text property of textBox2. The Environment.Newline is used to cause the display to move to a new line:

this.textBox2.Text = “The matches are:” + Environment.NewLine;

Then you use a foreach statement to add further text to textBox2 for each Match object contained in the myMatchCollection variable:

foreach(Match myMatch in myMatchCollection)

{

this.textBox2.Text += myMatch.ToString() + Environment.NewLine;

}

The Replace() Method

The Regex class’s Replace() method allows character sequences that match a pattern to be replaced by a specified pattern or sequence of characters.

Try It Out

the Replace() Method

1.Create a new console application in Visual Studio 2003, and name the new project

SimpleReplace.

2.In the code editor, make edits so that the code matches the following, Class1.cs:

using System;

using System.Text.RegularExpressions;

namespace SimpleReplace

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

526

C# and Regular Expressions

Console.WriteLine(@”This will find a match for the regular expression ‘wrox’”); Console.WriteLine(@”and replace it with ‘Wrox’.”);

Console.WriteLine(“Enter a test string now.”);

Regex myRegex = new Regex(@”wrox”, RegexOptions.IgnoreCase); string inputString;

inputString = Console.ReadLine();

string newString = myRegex.Replace(inputString, “Wrox”); Console.WriteLine(“You entered the string ‘“ + inputString + “‘.”); Console.WriteLine(“After replacement the new string is ‘“ + newString + “‘.”);

Console.ReadLine();

}

}

}

Be sure to include the using System.Text.RegularExpressions; directive. Save the code, and press F5 to run it.

3.In the command window, enter the sample text This book is published by wrox.; and then press the Return key and inspect the displayed results, as shown in Figure 22-8. Notice that the character sequence wrox (initial lowercase w) is replaced by Wrox (initial uppercase W).

Figure 22-8

4.Press the Return key to close the command window.

5.In Visual Studio, press F5 to run the code again.

6.In the command window, enter the test string This book is published by WROX.; press the Return key; and inspect the results. Because matching is case insensitive, as specified by the IgnoreCase option, the character sequence WROX is matched and is also replaced by the character sequence Wrox.

How It Works

The code, as usual, includes a using System.Text.RegularExpressions; directive.

First, a message is displayed that informs the user of the purpose of the application:

Console.WriteLine(@”This will find a match for the regular expression ‘wrox’”);

Console.WriteLine(@”and replace it with ‘Wrox’.”);

The simple literal pattern wrox is assigned to the myRegex object variable. Because the IgnoreCase option is specified, wrox, Wrox, WROX, and so on will be matched:

Regex myRegex = new Regex(@”wrox”, RegexOptions.IgnoreCase);

527

Chapter 22

Then the user is invited to input a string, which is assigned to the inputString variable.

The myRegex object’s Replace() method is used to replace the first occurrence of wrox (matched case insensitively) in the variable inputString with the character sequence Wrox:

string newString = myRegex.Replace(inputString, “Wrox”); Console.WriteLine(“You entered the string ‘“ + inputString + “‘.”); Console.WriteLine(“After replacement the new string is ‘“ + newString + “‘.”);

When the input string contains the character sequence wrox, it is replaced with Wrox. When the input string contains WROX, it is also replaced with Wrox.

The Split() Method

The Regex class’s Split() method splits a string at a position specified by a regular expression pattern.

The Split() method can be used with an instantiated Regex object or as a static method.

Try It Out

the Regex.Split() Method

1.Create a new project in Visual Studio 2003 using the Windows Application template.

2.Drag a label onto the form, and change its Text property to This demonstrates the Regex Split() method..

3.Drag another label onto the form a little lower, and change its Text property to This will split a string when a comma is matched..

4.Drag a third label onto the form a little lower than the second, and change its Text property to

Enter a string which includes commas:.

5.Drag a text box onto the form, and make its Text property blank.

6.Drag a button onto the form, and make its Text property Click to split the string..

7.Tidy up the layout of the form so that it resembles that shown in Figure 22-9. Your form may differ a little in appearance without affecting the functionality.

8.Double-click the button, and the code editor should open with the following code displayed:

private void button1_Click(object sender, System.EventArgs e)

{

}

528

C# and Regular Expressions

Figure 22-9

9.Scroll up to the top of the code, and below the automatically created using directives, insert the following code:

using System.Text.RegularExpressions;

10.Scroll down to the button1_Click() function, and add the following code:

Regex myRegex = new Regex(“,”);

string inputString = this.textBox1.Text; string[] splitResults;

splitResults = myRegex.Split(inputString);

this.textBox2.Text = “The string contained the following elements:” + Environment.NewLine + Environment.NewLine;

foreach (string stringElement in splitResults) this.textBox2.Text += stringElement + Environment.NewLine;

11.Save the code, and press F5 to run it.

12.In the upper text box, add the text A1,B2,C12,D13; click the button; and inspect the results displayed in the lower (multiline) text box, as shown in Figure 22-10.

529

Chapter 22

Figure 22-10

How It Works

Looking at the code in the button1_Click() function, first the myRegex variable is declared and is assigned the value of a comma. In other words, myRegex will match on a comma. However, in this example, you will split the test string when you find a match for the regular expression pattern.

Regex myRegex = new Regex(“,”);

Next, the variable inputString is declared and is assigned the value of the text entered into the upper of the two text boxes:

string inputString = this.textBox1.Text;

Next, a string array, splitResults, is declared:

string[] splitResults;

Then the result of applying the Split() method to the inputString variable is assigned to the splitResults array. Each element in that array contains a character sequence that was originally separated by a comma from its neighboring element:

splitResults = myRegex.Split(inputString);

530