今回のテーマ
今回は正規表現のメソッドについて触れていきます。対象となるメソッドは下記のメソッドです。
正規表現のメソッド
- IsMatch
- Match
- Matches
- Replace
C#の正規表現については下記の記事で軽くふれたくらいなので
今回の記事でソースコードを見ながら、正規表現の各メソッドの使い方を学んで下さい。
こちらもCHECK
-
【C# sharp】2文字以上の文字列でSplit(分割)する方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
それでは、学んでいきましょう!!
正規表現の基本はコチラ
-
【C#】csharpで正規表現(Regexクラス)について学ぼう!!パターンマッチングを一気に学ぶ!
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 正規表現マス ...
続きを見る
IsMatch
まずはIsMatchメソッドの使い方です。下記の引数が二つのIsMatchメソッドを扱うことがほとんどだと思います。
1 |
public static bool IsMatch(string input, string pattern); |
戻り値はbool型で第1引数に対象の文字列、第2引数に正規表現を指定します。
試しに下記のようなソースコードを作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string[] robotarray = new string[] { "Rock", "Rockman", "Rockman2", "Rockman3", "3Rockman", "Rockman4","Rock4man" }; foreach(var robot in robotarray) { bool ismatch = Regex.IsMatch(robot, @"^Rock.*\d$"); if (ismatch) { Console.WriteLine(robot); } } } } |
出力結果
Rockman2
Rockman3
Rockman4
正規表現については別記事に書くつもりなので、この記事では軽くしか触れません。他メソッドも今回の配列と正規表現で色々やっていきます。
今回例として扱った正規表現はRockから始まり、数字で終わる正規表現です。
このソースコードは配列の要素を1つずつ確認していき、正規表現に一致している場合に出力します。
IsMatchメソッドで一致している場合はTrue、一致していない場合はFalseを返していることが出力結果で分かると思います。
下記のソースコードのようにLinqのCountメソッドと組み合わせると1行で一致した件数を出力できます。覚えておくと、便利ですよ!!
1 2 3 4 5 6 7 8 9 10 11 12 |
using System; using System.Text.RegularExpressions; using System.Linq; class Program { static void Main(string[] args) { string[] robotarray = new string[] { "Rock", "Rockman", "Rockman2", "Rockman3", "3Rockman", "Rockman4","Rock4man" }; Console.WriteLine(robotarray.Count(n => Regex.IsMatch(n,@"^Rock.*\d$"))); } } |
出力結果
3
Match
続けて、Matchメソッドをみていきましょう。このメソッドは下記のようになっています。
1 |
public static Match Match(string input, string pattern); |
引数はIsMatchメソッドと同じですが、返り値がMatch型です。
Matchクラスには下記のようなプロパティが用意されています。
Success | 一致した場合はTrue、それ以外はFalse IsMatchの結果と同様 |
Index | 一致した部分文字列の先頭の位置 |
Length | 一致した部分文字列の長さ |
Value | 一致した部分文字列 |
とりあえず、出力結果を見た方が早いので、ソースコード例をどんどんみていきましょう。
Success
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string[] robotarray = new string[] { "Rock", "Rockman", "Rockman2", "Rockman3", "3Rockman", "Rockman4","Rock4man" }; foreach(var robot in robotarray) { Match match = Regex.Match(robot, @"^Rock.*\d$"); if (match.Success) { Console.WriteLine(robot); } } } } |
出力結果
Rockman2
Rockman3
Rockman4
IsMatchメソッドと同じ結果ですね。
Index、Length、Value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string[] robotarray = new string[] { "Rock", "Rockman", "Rockman2", "Rockman3", "3Rockman", "Rockman4","Rock4man" }; foreach(var robot in robotarray) { Match match = Regex.Match(robot, @"^Rock.*\d$"); if (match.Success) { Console.WriteLine("Index:" + match.Index); Console.WriteLine("Length:" + match.Length); Console.WriteLine("Value:" + match.Value); } } } } |
出力結果
Index:0
Length:8
Value:Rockman2
Index:0
Length:8
Value:Rockman3
Index:0
Length:8
Value:Rockman4
それぞれ出力結果を見比べてみましょう。まず、Indexは例が良くないですが、0番目から値が一致しているので全て0と出力されています。
Lengthは文字列の長さの8が出力されています。Valueは値が出力されています。
Matchメソッドはこのようなプロパティが用意されているので、比較的便利に扱うことができます。
Matches
続いてMatchesです。このメソッドは正規表現と一致した文字列をMatchCollection型として返してくれます。
1 |
public static MatchCollection Matches(string input, string pattern); |
正規表現に該当した文字列を全て、MatchCollectionとして格納してくれます。
分かりにくいと思うので、下記のソースコードで処理の動きをみてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string context = "私はRockman2とRockman3とRockman4がとてもほちぃ。"; var matches = Regex.Matches(context, @"R([^\d]+)*\d"); foreach(Match match in matches) { Console.WriteLine(match.Value); } } } |
出力結果
Rockman2
Rockman3
Rockman4
文字列からRockman2、Rockman3、Rockman4のみ出力するソースコードです。
Matchesメソッドでは、出力結果のように一致した全ての文字列をMatchCollectionクラスに格納してくれます。
正規表現がさすがにややこしいので簡単に解説します。
Rから始まる。
([^\d]+)*により、「Rockman2とRockman3とRockman4」などと一致しないようにするため、数字を除外する。
数字を除外しているため、*では「Rockman」まで一致する。
最後に\dを指定することで数字が一致する。
また、MatchesCollectionクラスでは、Matchクラスを1つずつ格納していくため、Foreach内でvarでの指定は出来ません。
Replace
正規表現でよく使用するReplaceメソッドの使い方です。
String型のメソッドでもお馴染みのReplaceメソッドです。早速ソースコード例をみてみましょう!
Matchesで使用した文字列を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 |
using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string context = "私はRockman2とRockman3とRockman4がとてもほちぃ。"; var replacecontent = Regex.Replace(context, @"R([^\d]+)*\d","Rollchan"); Console.WriteLine(replacecontent); } } |
出力結果
私はRollchanとRollchanとRollchanがとてもほちぃ。
一致した全ての値が「Rollchan」に変わりましたね!基本的にString型と同じように使用することができます!
注意点としては、第1引数に対象の文字列が来る事くらいです!
まとめ
今回は正規表現でよく使用するメソッドを解説しました。
正規表現のメソッドを自由に扱えるようになると文字列の処理の幅が大幅に広がるので是非おぼえてくださいね。