- ベストアンサー
正規表現で [ ] を探したい
正規表現の説明のサイトなど、調べてみたのですが、分からなかったのでお聞きします。 現在下記のようなテキストデータがあります。 []は半角カッコです。 ************* : [かきこ] あいうえお ばびぶべぼ [まみむめもI らりるれろ かきくけこ : ************* OCR処理をしている為、カッコ"]"が"I"大文字半角のアイになっている箇所があります。 その間違いを捜し当てたいのですが、 [ I I ] I I の3パターンあると思うのですが、それぞれを探せる正規表現を教えていただけないでしょうか? どなたかご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
今さらですが、#2 だと[ ]のパターンもひっかかってしまうので 書き直しておきます。 (\[[^I]*I|I[^\]I]*[\]I]) ■ 暇なので説明すると、全体的に (A|B) 「AまたはBのいずれかとマッチング」するという構造です。 A : \[[^I]*I B : I[^\]I]*[\]I] ■ [I A は [ と I に囲まれた [^I]* にマッチング。 つまり [^I] : I 以外のあらゆる文字一字分 なので [^I]* : I 以外のあらゆる文字0字以上 という意味ですから、 [ABCI ... 全部ひっかかる [AICI ... [ から真ん中の I までひっかかる となります。 真ん中の部分を [^\n]* : 改行文字以外の文字0字以上 などとしてやると、 [AICI ... 全体がひっかかる と最大範囲がひっかかるようになります。 ■ I] II B は、I と [\]I] : ] または I どちらか一文字 に囲まれた [^\]I]* にマッチング。 つまり、 [^\]I] : ] と I 以外のあらゆる文字一字分 なので [^\]I]* : ] と I 以外のあらゆる文字0字以上 なので、 IABC] ... 全体にひっかかる IAIC] ... 最初に左の I から真ん中の I までひっかかり 次に真ん中の I から ] までひっかかる となります。 同じように真ん中を [^\n]* としてやると IAIC] ... 全体にひっかかる となります。 ■ 任意の一文字を . で表現できる正規表現なら [^\n]* → .* と書けるかもしれません。 Perl だと \W* とかになるのかな?
その他の回答 (2)
- komugi100g
- ベストアンサー率58% (108/186)
[あいう]えおI から「[あいう]」のような最小範囲部分を調べたいなら (\[|I)[^\]I]*(\]|I) 「[あいう]えおI」のような最大範囲を調べたいなら (\[|I)[^\n]*(\]|I) 行頭(^)、行末($)にあるのがわかってるなら ^正規表現$ とします。
- apricotgx
- ベストアンサー率22% (20/88)
秀丸エディタで以下の文字列で正規表現の検索が出来ました。 \[.*I I.*\] I.*I