• ベストアンサー

正規表現で [ ] を探したい

正規表現の説明のサイトなど、調べてみたのですが、分からなかったのでお聞きします。 現在下記のようなテキストデータがあります。 []は半角カッコです。 ************* : [かきこ] あいうえお ばびぶべぼ [まみむめもI らりるれろ かきくけこ : ************* OCR処理をしている為、カッコ"]"が"I"大文字半角のアイになっている箇所があります。 その間違いを捜し当てたいのですが、 [ I I ] I I の3パターンあると思うのですが、それぞれを探せる正規表現を教えていただけないでしょうか? どなたかご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.2

 [あいう]えおI から「[あいう]」のような最小範囲部分を調べたいなら  (\[|I)[^\]I]*(\]|I) 「[あいう]えおI」のような最大範囲を調べたいなら  (\[|I)[^\n]*(\]|I) 行頭(^)、行末($)にあるのがわかってるなら  ^正規表現$ とします。 

  • apricotgx
  • ベストアンサー率22% (20/88)
回答No.1

秀丸エディタで以下の文字列で正規表現の検索が出来ました。 \[.*I I.*\] I.*I

関連するQ&A

専門家に質問してみよう