Regexクラスをを利用して正規表現で文字列を検索するコードを紹介します。
概要
正規表現で文字列を検索するには、Regexクラスを利用します。
プログラム例1
UI
下図のフォームを作成します。
テキストボックスとボタン、MultilineプロパティをTrueに設定した複数行のテキストボックスを配置します。
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RegexMatch
{
public partial class FormSimpleMatch : Form
{
public FormSimpleMatch()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string inputText = textBox1.Text;
Regex regex = new Regex("pen");
Match match = regex.Match(inputText);
if (match.Success == true) {
textBox2.Text += string.Format("{0:d}:{1:d} - {2}\r\n",match.Index, match.Length, match.Value);
}
}
}
}
解説
Regexクラスのインスタンスを作成します。Regexクラスのコンストラクタに検索する正規表現式を与えます。
作成した、RegexクラスのMatchメソッドを呼び出します。Matchメソッドの引数に検索したい文字列を与えて検索します。
検索結果はMatchメソッドの戻り値として返ります。
string inputText = textBox1.Text;
Regex regex = new Regex("pen");
Match match = regex.Match(inputText);
Matchメソッドの戻り値のMatchオブジェクトのSuccessプロパティの値を確認します。値がtrueであれば、入力文字列に一致した部分があります。
一致した部分の開始位置が、MatchオブジェクトのIndexプロパティに設定され、一致部分の文字列数が、Lengthプロパティに設定されます。
また、一致した部分の文字列がValueプロパティに設定されます。
各プロパティの値をテキストボックスに表示します。
if (match.Success == true) {
textBox2.Text += string.Format("{0:d}:{1:d} - {2}\r\n",match.Index, match.Length, match.Value);
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
上部のテキストボックスに文字列を入力します。"load-open-close" の文字列を入力します。
[button1]をクリックします。下部のテキストボックスに "6:3 - pen" の文字列が表示されます。
"load-open-close" 文字列内にある "pen" の文字列を検索します。入力文字列の7文字目から3文字が一致している部分のため、
1文字目のインデックス番号が0となりますので、"6:3" の値が結果となります。
"largepenguin" の文字列を入力した場合の結果です。5文字目から3文字分が一致している箇所になります。
プログラム例2
別の検索式での例です。
UI
下図のフォームを作成します。
テキストボックスとボタン、MultilineプロパティをTrueに設定した複数行のテキストボックスを配置します。
ボタンは[button2]のみを利用します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RegexMatch
{
public partial class FormSimpleMatch : Form
{
public FormSimpleMatch()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
string inputText = textBox1.Text;
Regex regex = new Regex("[0-9]{2}");
Match match = regex.Match(inputText);
if (match.Success == true) {
textBox2.Text += string.Format("{0:d}:{1:d} - {2}\r\n", match.Index, match.Length, match.Value);
}
}
}
}
解説
先ほどのコードと同様ですが、正規表現の式を
[0-9]{2}
としています。2桁の数値を検索する動作となります。
string inputText = textBox1.Text;
Regex regex = new Regex("[0-9]{2}");
Match match = regex.Match(inputText);
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
上部のテキストボックスに"Penguin50Yen"を入力します。
[button2]をクリックします。2桁の数値を検索します。8文字目から2文字が"50"のため、"7:2"が結果として表示されます。
入力が"Penguin100Yen"の場合も、100の部分の最初の2文字が数値のため、"7:2"が検索結果として表示されます。
入力が"Dock7Yen"の場合は、数値が一桁のため、検索にはマッチしません。
正規表現を利用して文字列を検索できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-01-17
作成日: 2023-01-17