.net column

.NET開発者のためのブログメディア
検索・抽出

【C#正規表現の使い方1】Matchメソッドで文字列を抽出する

2020年07月31日

C#で正規表現を扱う場合はRegexクラスを使用しますが、その中でも正規表現のパターンに応じて文字列を抽出する場合はMatchメソッドを使用します。
この記事では、Regex.Matchメソッドについて解説していきますので、ぜひ参考にしてください。

PG
文字列の中で数値の部分だけを抽出したいのですが、何か良い方法はあるでしょうか?
PL
正規表現を使用して数値を抽出することができますよ。RegexクラスのMatchメソッドについて調べてみてください。

実行環境
・Windows 10 Home
・Visual Studio Community 2019

Regex.Matchメソッドの概要

C#で正規表現パターンと一致した文字列を抽出する場合、Regex.MatchメソッドまたはRegex.Matchesメソッドを使用します。2つの違いは以下のとおりです。

  • ・Matchメソッドは、最初に一致した文字列を抽出
  • ・Matchesメソッドは、一致したすべての文字列を抽出

各メソッドには複数の定義が存在しますが、主なパターンを例に挙げて紹介します。

入力文字列のうち、正規表現パターンで検索した結果をMatchオブジェクトで返します。Matchオブジェクトの主なプロパティも紹介しておきます。

プロパティ 説明
Index 正規表現パターンに一致した文字列のうち、最初の文字が見つかる元の文字列の位置
Value 入力文字列から、正規表現パターンに一致した文字列

また、Matchesメソッドの場合は、Matchオブジェクトのコレクションを返します。

正規表現を使用した文字列の抽出

まず、今回使用する正規表現パターンは以下となります。

パターン 説明
\d 数値(0~9)
\w 英字、数値、記号
+ 1回以上の一致

それでは、実際に正規表現を使用して文字列を抽出してみましょう。

最初に一致した部分を抽出する

Matchメソッドを使用して、文字列を抽出します。

正規表現パターンとして「\d+-\d+」を指定しています。
「\d」は数値(0~9)、「+」は1回以上の一致、「-」は文字列そのままとなり
「-」を挟んで1回以上の数値を含む「000-0000」部分が一致するため、Valueに格納されています。Indexは1文字目を0としてカウントするため、先頭の数値(0)の位置は「4」となります。

次は、入力文字列にパターン一致が複数存在する場合です。

入力文字列のうち、正規表現に一致する文字列は「001」と「99」で複数存在します。しかし、Matchでは最初の一致を返すため、「001」がValueに格納されていますね。

一致したすべての部分を抽出する

最初に一致する部分だけでなく、すべての部分を抽出したい場合は、Matchesメソッドを使用します。

Matchメソッドを使用した際は「001」のみが抽出されましたが、Matchesメソッドを使用したことにより、「99」も抽出することができました。

重複する単語を識別して抽出する方法

重複する単語を識別するために、新たに使用する正規表現パターンは以下となります。

パターン 説明
\b 単語の境界
? 0回または1回の一致
( ) 一致する部分文字列をグループ化※
\s 空白文字と一致
\1 \1のグループが示す部分文字列と一致

※グループは1から順番に割り当てられ、最初のグループを正規表現で使用したい場合は「\1」で表現する

単語が重複している「is is」の部分が抽出されていますね。

PG
なるほど、正規表現を使いこなせれば複雑な文字列も取得できそうですね。
PL
そうですね。まずは試行錯誤しながら、コードを組んでみてください。

Regexクラスで文字列の抽出ができる

今回は、Regex.Matchメソッドを使用した文字列の抽出を紹介しました。Regexクラスには正規表現を使用した様々なメソッドが用意されています。初めて耳にしたという方も、この機会にぜひ活用してみてください。

>>>C#の案件を探すならFEnet .NET Navi


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)