Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】文字列から句読点を削除する3つの方法

はじめに

文字列から句読点(ピリオド、カンマ、疑問符など)をまとめて取り除きたい場面は、テキスト処理やデータクレンジングでよくあります。最も高速な方法は、標準ライブラリの string モジュールと str.translate() を組み合わせることです。この記事では、代表的な3つの方法をコード例とともに解説します。

方法1:str.translate() を使う(高速・推奨)

str.maketrans() で「削除対象の文字」を指定した変換テーブルを作成し、translate() に渡すことで、句読点を一括除去できます。

import string

s = "string. With. Punctuation?"
# 第3引数に指定した文字が削除される変換テーブルを作成
translator = str.maketrans('', '', string.punctuation)
print(s.translate(translator))

実行結果は次のとおりです。

string With Punctuation

string.punctuation には、!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ というASCII句読点がすべて定義されています。translate() は内部でC言語レベルの処理が行われるため、大量のテキストを扱う場合にも高いパフォーマンスを発揮します。

方法2:内包表記でフィルタリングする(読みやすい)

より直感的で読みやすいコードにしたい場合は、ジェネレータ式で文字を1つずつ判定し、句読点以外の文字だけを連結する方法があります。

import string

s = "string. With. Punctuation?"
exclude = set(string.punctuation)
s = ''.join(ch for ch in s if ch not in exclude)
print(s)

実行結果:

string With Punctuation

句読点を set にしておくことで、所属判定がO(1)になりパフォーマンスが向上します。ただし、純粋なPythonのループ処理になるため、translate() よりは速度で劣ります。

方法3:正規表現を使う(柔軟)

re モジュールを利用すれば、パターンベースで柔軟に記号を除去できます。

import re

s = "string. With. Punctuation?"
s = re.sub(r'[^\w\s]', '', s)
print(s)

実行結果:

string With Punctuation

パターン [^\w\s] は「英数字・アンダースコア・空白以外の文字」に一致するため、句読点などの記号をまとめて削除できます。削除したい文字を細かく制御したい場合に特に有効です。

まとめ

  • 速度重視str.translate() + str.maketrans()
  • 可読性重視 → 内包表記によるフィルタリング
  • 柔軟なパターン制御が必要re.sub()

それぞれの特徴を理解して使い分ければ、効率的かつ保守しやすいテキスト処理が実現できます。日常的な前処理には translate() を、条件が複雑なケースには正規表現を選ぶのがおすすめです。

  1. 【初心者向け】Pythonでリストから要素を削除する4つの方法|pop()・remove()・del・clear()の使い方

    Pythonのリスト(list)は線形データ構造の一つで、要素が連続したメモリ領域に格納され、各要素にはインデックスを使ってアクセスできます。 プログラミングをしていると、リストから特定の要素を削除したい場面によく出会います。Pythonにはそのための組み込み機能がいくつか用意されており、目的に応じて使い分けることが大切です。この記事では、代表的な4つの方法「pop()」「remove()」「del」「clear()」をコード例とともに解説します。 1. pop():インデックスを指定して削除する pop() は、引数として渡したインデックス位置にある要素を削除します。さらに、削除された要素を

  2. 【Python】Tkinterでラベルのテキストを削除する方法をわかりやすく解説

    Tkinterは、PythonでGUIベースのアプリケーションを作成・開発するための標準ライブラリです。この記事では、何らかのテキストが表示されているラベルから、そのテキストを削除する方法を解説します。 ラベルからテキストを削除するには、ラベルの表示を切り替えるトリガーとして機能するボタンを作成します。具体的には、config()メソッドを使ってラベルのtext属性を空の文字列に書き換えます。 サンプルコード # Tkinterライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウィンドウのサイズを