第7話 括弧の種類による色分け表示(正規表現を使用)

 投稿するためのテキストデータを作成する際にはテキストエディタを使用していますが、その中で間違いが多かったのが「各種括弧の閉じ忘れ」でした。会話の終わりを表す括弧の付け忘れる、対応しない閉じ括弧を使用してしまう、など、後から探しづらい間違いを多くしてしまいました。間違いを後から探すのと間違えないようにするのとでは、明らかに後者のほうが手間が少なくてすみます。砂の中からガラス片を探すよりも、ガラス片を落とさないようにするほうが楽なのと同じです。ですので、間違えないようにする方法、あるいは、間違えてもすぐにわかる方法はないだろうかと考えました。


 少しして思いついたのが、テキストエディタの機能を使用するということでした。現在使用しているテキストエディタは、プログラミング(ここでは『ソースコードの作成』の意)にも使用可能なものですので、そのための支援機能が幾つか実装されています。そのうちの一つの機能として、ある特定の文字列の強調表示というものがあります。この機能は、各種プログラミング言語で予約されている特定の文字列(if、else、など)を目立たせるためのものです。また、強調表示させるための文字列を独自に設定することも可能、その条件に正規表現を使用することも可能です。強調表示は画面表示上だけの変更だけですので、制御文字を埋め込まれるなどのことはなく、テキストデータそのものに変更を加えるわけではありません。作成したテキストデータをそのまま投稿しても特に問題ないため、この機能を試すことにしました。


 原稿では、通常の会話(声を出す会話)と、通常ではない会話(声を出さない会話)とを使用していたため、これらを色分けすることを考えました。ある程度の試行錯誤の末、辿り着いたのが以下の二つでした。

――――――――

・通常の会話(声を出す会話)を表す正規表現:

    「[^(].*?[^)]」

 文字列の例:

    「これはテストです」


・通常ではない会話(声を出さない会話):

    「(.*?)」

  文字列の例:

    「(これはテストです)」

――――――――


通常の会話(声を出す会話)を表す正規表現の意味は以下のとおりです:

――――――――

  「    始めかぎ括弧があり、

  [^(]  始め小括弧ではない任意の文字が一文字あり、

  .*?   任意の文字がゼロ個以上連続し(ただし、最短マッチ)、

  [^)]  終わり小括弧ではない任意の文字が一文字あり、

  」    終わりかぎ括弧がある

――――――――


通常ではない会話(声を出さない会話)を表す正規表現の意味は以下のとおりです:

――――――――

  「    始めかぎ括弧があり、

  (    始め小括弧があり、

  .*?   任意の文字がゼロ個以上連続し(ただし、最短マッチ)、

  )    終わり小括弧があり、

  」    終わりかぎ括弧がある

――――――――


 通常の会話(声を出す会話)を表す正規表現が面倒なことになったのは、現在使用しているテキストエディタでは検索条件の優先順位付けができないことに起因します。他のテキストエディタではもう少し簡単になるかもしれません。また、上述の正規表現も全ての場合で機能するわけでもありません。以下の例では、機能しないのです。

――――――――

・通常の会話を表す正規表現にはマッチしない文字列の例:

    「あ」

――――――――

通常の会話(声を出す会話)を表す正規表現では、括弧の中身に少なくとも二文字を要求しているため、上述の例のような、括弧の中身が一文字の場合は検索条件にマッチせず、色分け表示もされません。これは、仕様上しかたないものとして諦めています。


※前述の文字列の例が色分けされない点については、終わりかぎ括弧の前に句読点をつけることにしたため、解消されました。

    「あ。」

または

    「あ、」

と書くことにより、前述の正規表現でも条件を満たすため、色分け表示されます。


 また、正規表現の別の例として、ルビを表す文字列も設定しました。以下が、その正規表現の説明です。

――――――――

  |   たて棒があり、

  .+?  任意の文字が一個以上連続し(ただし、最短マッチ)、

  《   始め二重山括弧があり、

  .*?  任意の文字がゼロ個以上連続し(ただし、最短マッチ)、

  》   終わり二重山括弧がある

――――――――

正規表現そのものは、画面上ではルビ化されて表示されてしまうため、要素ごとに分けて表示しています。実際の正規表現は一続きです。


 上述の設定により、各種括弧を閉じたときに条件を満たしていれば文字列の色が変更されるようになり、一目で括弧の対応関係が正しいかがわかるようになりました。また、地の文と会話文とが異なる色で表示されるため、会話のおおよその割合もわかるようになりました。会話が続いている、地の文が続いている、なども文字列の色で判断できるようになったため、推敲の際にも役立っています。以下、上述の正規表現も含めて、現在設定している正規表現の例です。

――――――――

(1) (.+?)

(2) [.+?]

(3) 〈.+?〉

(4) 「(.*?)」

(5) 「[^(].*?[^)]」

(6) 『.*?』

――――――――

※ルビを表す正規表現は省略。

※通常ではない会話(声を出さない会話)として、現在は(3)を使用しています。


 正規表現は、方言が強い(ツールによって実装に差がある)ため、或るツールでは或る正規表現がうまく機能しても、別のツールではそうではないということもあります。正規表現を使うためにはある程度の試行錯誤は避けられませんが、これも仕様上しかたないものとして受け入れています。



参考文献:


『詳説 正規表現 第3版』/著:Jeffrey E.F. Friedl、訳:株式会社ロングテール/長尾 高弘/オライリー・ジャパン

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る