Pythonで文字列のエスケープを無効にして生の文字列として使う方法

スポンサーリンク

今回は、Pythonの生文字列の使い方を紹介します。

これはPythonの強力な機能で、文字をエスケープせずに「生の文字列」を導入することができます

Pythonの生の文字列は、通常の文字列の前にrまたはRを付けたものです。

これは、バックスラッシュ(’ ‘) のような文字をリテラル文字として扱います。

これは、この文字がエスケープ文字として扱われないことも意味します。

それでは、生の文字列の使い方を、いくつかの例を使って見てみましょう。


スポンサーリンク

Python 生の文字列

生の文字列の意味を理解するために、” n” という文字列を持つ以下の文字列を考えてみましょう。

s = "Hello from Python
Hi"
print(s)

ここで、sは通常の文字列リテラルなので、”˶‾‾‾”と”˶‾‾‾”はエスケープ文字として扱われます。

したがって、この文字列を印刷すると、対応するエスケープシーケンス(タブスペースと改行)が生成されます。

Hello    from Python
Hi

では、sを生の文字列として作成したい場合はどうなるでしょうか。

# s is now a raw string
# Here, both backslashes will NOT be escaped.
s = r"Hello from Python
Hi"
print(s)

ここでは、バックスラッシュはエスケープ文字として扱われないので、Pythonはタブスペースと改行文字を表示しません。

むしろ、” t” と “n” を文字通りに表示するだけです。

Hello from Python
Hi

このように、エスケープされた文字がないので、出力は入力と同じになります。

さて、Pythonの文字列が使えないときなど、生の文字列が非常に役立つ別のシナリオを見てみましょう。

以下の文字列リテラルは”˶‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾”という文字列です。

s = "Helloxfrom Python"
print(s)

ここで、”˶‾‾‾˵” は標準のユニコード・エンコーディングではデコードできません。

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-7: truncated xXX escape

つまり、文字列リテラルにすることもできないのです。

では、どうすればよいのでしょうか。

そこで便利なのが、生の文字列です。

この値を生の文字列リテラルと見なすことで、簡単に変数に渡すことができるのです

s = r"Helloxfrom Python"
print(s)

これで問題ありません。

この生の文字列リテラルを通常のオブジェクトとして渡すことができます。

Helloxfrom Python

注:Pythonの生の文字列をコンソールに出力する場合、以下のような表示になることがあります。

>>> r"Helloxfrom Python"
'Helloxfrom Python'

ここで、ダブルバックスラッシュは、バックスラッシュがエスケープされた通常のPythonの文字列であることを意味します。


まとめ

今回は、Pythonの生文字列を使って、特殊文字をエスケープせずに処理する方法を学びました。


参考文献

  • Pythonの生文字列に関するJournalDevの記事

タイトルとURLをコピーしました