Python入門|re.sub を使用して正規表現で「行頭」「行末」を置換するのイメージ画像

Python入門|re.sub を使用して正規表現で「行頭」「行末」を置換する

  • 公開日:2018/07/02
  • 更新日:2019/01/30
  • 投稿者:n bit

Pythonで正規表現を使った文字列の置換を行うときにはre.subメソッドを利用します。今回はre.subメソッドを使用して、正規表現で「行頭」や「行末」を指定した文字列の置き換え方法を解説します。

  • Python

この記事は約 分で読めます。(文字)

re.sub を使用して正規表現で「行頭」「行末」を置換する

Pythonで正規表現を使った文字列の置換を行うときには『re.sub』メソッドを利用します。『re.sub』メソッドの指定方法は以下の通りです。

  • 置換された文字列 = re.sub(検索する正規表現, 置換え文字列, 置換対象の文字列)

必要に応じて置換え回数を指定する『count』や、置換え時の動作を変更する『flags』などを利用します。

それでは実際に『re.sub』メソッドと、正規表現を利用して森鴎外の『知恵袋心頭語』内の1文の「行頭」や「行末」を置き換えてみましょう。

Note

森鴎外の『知恵袋心頭語』内の1文

『人に言うべき事は、最後まできちんと言うがよい。全部は言いたくないことだったら、むしろ初めから黙っていよ。』

re.sub を使用して正規表現で「行頭」を置換する

最初に『re.sub』メソッドを利用するために『re』モジュールをインポートします。

import re

文字列の先頭を指定する正規表現は『^』です。「キャレット」と読みます。『re.sub』メソッドの第1引数に『^』を指定して文字列を置き換えてみましょう。

import re


text = '''人に言うべき事は、最後まできちんと言うが良い。
全部は言いたくないことだったら、
むしろ初めから黙っていいよ。'''

text_new = re.sub('^', '「', text)
print(text_new)

出力結果

「人に言うべき事は、最後まできちんと言うが良い。

全部は言いたくないことだったら、
むしろ初めから黙っていいよ。

文字列の先頭に『「』が置き換えられたことが確認できます。

しかし、今回置き換えたいのは行頭ですので理想とする出力結果は2行目と3行目の頭にも『「』がついている状態ですよね。

『^』は文字列の先頭にしかマッチしないため『re.sub』メソッドの検索時の動作を変更する必要があります。文字列の先頭だけではなく各行頭も全て検索対象にしたい場合は『flags』に『re.MULTILINE』を指定します。

import re


text = '''人に言うべき事は、最後まできちんと言うが良い。
全部は言いたくないことだったら、
むしろ初めから黙っていいよ。'''

text_new = re.sub('^', '「', text, flags=re.MULTILINE)
print(text_new)

出力結果

「人に言うべき事は、最後まできちんと言うが良い。

「全部は言いたくないことだったら、
「むしろ初めから黙っていいよ。

これで理想としていた各行頭に『「』が付けられていることが確認できます。

re.sub を使用して正規表現で「行末」を置換する

次は『re.sub』メソッドと正規表現を使って行末を置き換えてみましょう。文末を指定する正規表現は『$』です。こちらも文章の最後だけにマッチしますので各行末を指定するためには『flags』に『re.MULTILINE』を指定しておきます。

import re


text = '''人に言うべき事は、最後まできちんと言うが良い。
全部は言いたくないことだったら、
むしろ初めから黙っていいよ。'''

text_new = re.sub('$', '」', text, flags=re.MULTILINE)
print(text_new)

出力結果

人に言うべき事は、最後まできちんと言うが良い。」

全部は言いたくないことだったら、」
むしろ初めから黙っていいよ。」

これで各行末に『」』が置き換えられていることが確認できます。

今日のdot

文字列の先頭を指定する正規表現は『^』、文末を指定する正規表現は『$』です。

それぞれの正規表現を利用して『re.sub』メソッドで文字列を置換えます。ポイントは各行の「行頭」「行末」に対応できるように『flags』に『re.MULTILINE』を指定しておくことです。

import re


text = '''人に言うべき事は、最後まできちんと言うが良い。
全部は言いたくないことだったら、
むしろ初めから黙っていいよ。'''

text_new = re.sub('^', '「', text, flags=re.MULTILINE)
text_new = re.sub('$', '」', text_new, flags=re.MULTILINE)
print(text_new)

出力結果

「人に言うべき事は、最後まできちんと言うが良い。」

「全部は言いたくないことだったら、」
「むしろ初めから黙っていいよ。」