一般的な文書では縦組み・横組みに関わらず、段落のはじめは行頭の一文字を下げる(空白を空ける)のが通例です。そもそも段落とは文書における1ブロックを指し、パラグラフと呼ぶことも。蛇足ですが、その段落がひとつの意味を持った固まりの場合は「意味段落」と呼び、見やすさなどを考慮し、形式上段落になっている場合は「形式段落」と呼ぶこともあります。

本誌をはじめとするWeb上の文書は、文字下げを行なわず、改行を用いて段落を構成する文書を目にします。これはHTMLの「P」タグが段落を構成する「Paragraph」の略であり、スタイルシートを用いて加工しない限り、約一行分の行間が空けられてしまうからでしょう。

IT系ニュースサイトをチェックしてみますと、段落で文字下げを行なっているサイト多いようです。もっとも小説や学術書と大きく異なるニュース系記事は形式段落が多いため、それほどこだわる必要はないのかもしれません。

どちらが正しいとか見やすいといった意見はさておいて、プライベートでは位置も文字下げを行なわずに書いている文書を、提出文書では文字下げを行ないたい。もしくはその逆で、行頭の字下げを解除したい場面もあることでしょう。そこでこれらの字下げを制御する正規表現にチャレンジしてみましょう。

ポイントはパターンの先頭にある時のみ行頭にマッチするキャレットです。キャレットを先頭に、全角スペースからシフトJISの末尾となる「黑」までをキャラクタークラスで指定した正規表現「^[、-黑]」を検索文字列。「□\0」(□は全角スペース)を置換文字列とすることで、段落行頭の一文字下げが成功しました(図1~2)。

図1 置換ダイアログを開き、「検索」に「^[、-黑]」と入力。「置換」に「 \0」と入力して、[全置換]をクリックします

図2 これで各段落の行頭がすべて一文字下がりました

しかし、段落の行頭が半角英数字ではじまる場合、この正規表現ではマッチしません。シフトJISのコードを確認すると、0x21となる感嘆符から数えるべきかもしれませんが、文書として最初に感嘆符が来ることはありません。そこで半角数字である0x30の「0」から0x7Aの「z」まで。続いて全角英数字の「0」から先の「黑」までをキャラクタークラスで囲みましょう。

この場合の正規表現は「^[0-z|0-黑]」として指定しましょう。これなら一行目の「○」ではじまる小見出しを含まずに、段落だけを対象に置換操作が行なえます(図3~4)。

図3 今度は置換ダイアログを開き、「検索」に「^[0-z|0-黑]」と入力。「置換」に「 \0」と入力して、[全置換]をクリックします

図4 今度は小見出しなどを含まず、半角英数字ではじまる段落も正しく字下げできました

正規表現

検索文字列:^[0-z|0-黑]
置換文字列: \0

今度は逆のパターンとして、行頭が全角スペースで字下げされている段落の全角スペースを取り除きましょう。前述の正規表現を応用しますと、「^ [0-z|0-黑]」が検索文字列。「\0」が置換文字列となりそうですが、このままでは文字下げ直後の一文字も消えてしまうため、正しく置換できません。

この問題を回避するには「^ ([0-z|0-黑])」と、置換後も残す部分をグルーピング指定することで、正しく置換することができます(図5~6)。

図5 置換ダイアログを開き、「検索」に「^ ([0-z|0-黑])」と入力。「置換」に「\0」と入力して、[全置換]をクリックします

図6 これで段落行頭にある全角スペースの字下げがすべて解除されました

正規表現

検索文字列:^ ([0-z|0-黑])
置換文字列:\0

阿久津良和(Cactus)