C# で正規表現文字列検索をしたいのですが、 検索対象の文字列の中に "["(角括弧)が含まれています。

C# で正規表現文字列検索をしたいのですが、 検索対象の文字列の中に "["(角括弧)が含まれています。 例:"AAA[BBB]CCC" このなかから "[BBB]" と角括弧を含めた文字列を含む行を削除したいのですが、 Criteriaの文字列を "[BBB]" とすると "[" と "]" が邪魔をしてうまくいきません。 "[" と "]" を普通の文字として認識させることをエスケープするとか言うのですか? どうやったらできますか? よろしくお願いします。

補足

string criteria = ".*" + AlarmMessage + ".*"; Regex re = new Regex(criteria, RegexOptions.Multiline) ; Match m = re.Match(textBox1.Text) ; textBox1の中の文章から AlarmMessage で指定された文字列のある行を見つけたい。 ところが AlarmMessage には "[" と "]" が含まれていることがあってうまくいきません。 "[" と "]" のメタ文字としての働きを無効にするにはどうしたらいいでしょうか?

プログラミング | C言語関連23閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

そこまで気付けているならあと一歩です。 【保存版】正規表現でエスケープが必要な文字一覧表 https://qiita.com/katsukii/items/1c1550f064b4686c04d4

C#の言語としてのメタ文字の停止は文法としてありますが、 正規表現はあくまでも、Regexが与えられた文字列をどう処理するか?という問題で Regex側からしてみれば、与えられた文字列の元が文字リテラルであるか、 文字列変数に由来するものであるは、考慮されません。 (渡された時点で既に区別はなくなっているので判別は付きません) なので、AlarmMessageの中だけをロックする方法はありません。 予めAlarmMessageの中身に対して、個別にエスケープしておく必要があるかと思います。

ThanksImg質問者からのお礼コメント

できました。 string criteria = ".*" + division + ",OCCUR," + Regex.Escape(AlarmMessage) + ".*"; とすることでRegex.Escape()の中の文字列をエスケープしました。

お礼日時:4/6 10:51