前提・実現したいこと
C#のRegexで正規表現を使ったマッチングをしたいと思っています。
下記の表のようなデータがあり、入力データに対して一致した正規表現がどれなのかを取得したいです。
ID | 正規表現 |
---|---|
1 | 宮*県 |
2 | 東京都 |
3 | (京都|大阪)府 |
データの数だけRegexを作って検索をすればよいですが、もう少しスマートなやり方が無いものかと思い、そもそも1つのRegexに複数Regexを一つにまとめてしまって、一致したルール自体を取得できれば良いのではと考えました。
例えば、以下のようなことがしたいです。
■ルール
(宮県)|(東京都)|((京都|大阪)府)
■入力文
宮城県
■ヒットしたルール
・宮県
試したこと
データの数だけRegexを作成する方法
C#
1 2 public class RegDataClass 3 { 4 public int Id { set; get; } 5 public string RegexStr { set; get; } 6 } 7 8 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 string inputText = "宮崎県"; 14 15 List<RegDataClass> dataClasses = new List<RegDataClass>() 16 { 17 new RegDataClass() 18 { 19 Id=1, 20 RegexStr="宮.県", 21 }, 22 new RegDataClass() 23 { 24 Id=2, 25 RegexStr="東京都", 26 }, 27 new RegDataClass() 28 { 29 Id=3, 30 RegexStr="(京都|大阪)府", 31 } 32 }; 33 List<Regex> regices = new List<Regex>(); 34 35 for (int i = 0; i < dataClasses.Count; i++) 36 { 37 regices.Add(new Regex(dataClasses[i].RegexStr)); 38 } 39 40 for (int i = 0; i < regices.Count; i++) 41 { 42 if (regices[i].IsMatch(inputText)) 43 { 44 Console.WriteLine($"ID={i + 1}でヒット"); 45 } 46 } 47 } 48 }
よろしくお願いいたします。
Match.Name かコールバックを使ってください。
System.Text.RegularExpressions.MatchにNameというメソッドやメンバーは見当たりませんでした。確認するClassはこちらで合っているでしょうか?また、コールバックを使うとはどのように使うことを指しているでしょうか。念のため、例を書き直していますので実現したいことを再確認して頂けますと幸いです。
キャプチャグループの名前になると、判定したいルールに括弧が入るたびに1個ずつずれていってしまうのでこちらで実現するのは難しそうです。
回答5件
あなたの回答
tips
プレビュー