正規表現で文字列を検索する - Regexを利用する - C#

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
iPentec all rights reserverd.