こんにちは!エンジニアの中沢です。
C#には正規表現で文字列のパターンを指定して抽出するための「Matchメソッド」と「Matchesメソッド」があります。
正規表現でパターンを指定すれば任意の文字列を取得できるので、上手く活用してください。
この記事では、
・正規表現とは
・Matchメソッドで最初に一致した部分を抽出する方法
という基本的な内容から、
・Matchesメソッドで一致したすべての部分を抽出する方法
などの応用的な使い方に関しても解説していきます。
正規表現とは
正規表現とはいくつかの文字列のパターンを一つの形式でまとめて表現するための表現方法のことです。
主な正規表現については次の表のとおりになります。
記号 | 記号の説明 | 例 | 例の説明 |
---|---|---|---|
. | 任意の1文字。改行文字は除く。 | .+ | 任意の文字列 |
* | 直前の1文字の0回以上の繰り返しと一致 | hoge* | hogeもしくはhogee...と一致 |
^ | 行の先頭 | ^[0-9] | 行頭が数字 |
$ | 行の末尾 | ^.{10}$ | 10文字の行 |
[ ] | カッコ内の任意の1文字と一致。「-」で範囲指定可。 | [a-z] | 小文字のアルファベット1文字と一致 |
[^ ] | カッコ内の任意の1文字と不一致。「-」で範囲指定可。 | [^A-Z] | 大文字のアルファベット以外 |
+ | 直前の文字の1個以上の繰り返しと一致 | hoge+ | hogee...と一致 |
? | 直前の文字の0または1文字と一致 | hoge? | eと一致 |
{ } | カッコ内の数値の繰り返しと一致 | {n} | 直前の文字のn個の繰り返しと一致 |
{,n} | 直前の文字のn個以下の繰り返しと一致 | ||
{m,} | 直前の文字のm個以上の繰り返しと一致 | ||
{m,n} | 直前の文字のm個以上、n個以下の繰り返しと一致 | ||
| | 直前、直後どちらかのパターンに一致 | hoge|piyo | hogeまたはpiyo |
( ) | カッコ内をグループ化。マッチした内容は参照可。 | ー | ー |
Matchメソッドで最初に一致した部分を抽出する方法
ここでは、Matchメソッドで最初に一致した部分を抽出する方法を解説します。
Matchメソッドは第1引数に検索対象の文字列を指定し、第2引数に正規表現のパターンを指定します。
Matchメソッドは検索対象の文字列の中に一致する部分に複数あった場合でも、最初に一致した文字列だけを返すので注意してください。
次のプログラムで確認してみましょう。
using System; using System.Text.RegularExpressions; namespace Sample { class Sample { static void Main() { string str = "Samurai, 123, Engineer"; Match matche = Regex.Match(str, "[0-9]"); Console.WriteLine(matche.Value); Console.ReadKey(); } } }
実行結果:
1
このプログラムでは、0~9のいずれかの数字に一致するパターンの「[0-9]」を指定しています。
この実行結果のように、初めに現れる数値の「1」にマッチするため抽出することができます。
Matchesメソッドで一致したすべての部分を抽出する方法
ここでは、Matchesメソッドで一致したすべての部分を抽出する方法を解説します。
Matchesメソッドは指定したパターンに一致したすべての文字列を抽出するために使います。
Matchesメソッドは第1引数に検索対象の文字列を指定し、第2引数に正規表現のパターンを指定します。
次のプログラムで確認してみましょう。
using System; using System.Text.RegularExpressions; namespace Sample { class Sample { static void Main() { string str = "Samurai, 123, Engineer"; MatchCollection matche = Regex.Matches(str, "[0-9]"); foreach (Match m in matche) { Console.WriteLine(m.Value); } Console.ReadKey(); } } }
実行結果:
1 2 3
このプログラムでは、検索対象の文字列からすべての数値を抽出しています。
まとめ
いかがでしたか?
今回は正規表現でパターンを指定して抽出する方法を解説しました。
MatchメソッドとMatchesメソッドで抽出できる数が異なるので注意してくださいね。
もし、正規表現で抽出する方法を忘れてしまったらこの記事を確認してください!