Pythonで文字列から子音を削除する方法をわかりやすく解説
Pythonで文字列から子音を取り除きたい場合、最も手軽なのは正規表現(reモジュール)を使う方法です。この記事では、正規表現による削除方法を中心に、目的別のいくつかのアプローチをコード例とともに紹介します。
1. 正規表現のre.sub()で子音を削除する
複数の子音を「|」(OR条件)で連結してパターンを作り、re.sub(置換対象パターン, 置換後の文字列, 対象文字列)を呼び出すだけで、該当する文字を一括で除去できます。flags=re.IGNORECASEを指定すれば、大文字・小文字を区別せずに処理できます。
>>> import re
>>> consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm',
... 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']
>>> re.sub('|'.join(consonants), "", "Hello people", flags=re.IGNORECASE)
'eo eoe'
ポイント: 正規表現では [](文字クラス)を使って、置換対象となる文字のグループをまとめて定義することもできます。たとえば [bcd] は「b、c、d のいずれか1文字」を意味します。
2. 母音以外をすべて削除するシンプルな書き方
「母音だけを残し、それ以外はすべて消してよい」というケースなら、否定の文字クラス [^aeiou] を使うともっと簡単です。ただしこの方法では、空白や数字などの記号も一緒に削除される点に注意してください。
>>> import re
>>> re.sub('[^aeiou]', "", "Hello people", flags=re.IGNORECASE)
'eoeoe'
3. 内包表記とjoin()でフィルタリングする
正規表現を使いたくない場合は、ジェネレータ式(内包表記)と str.join() を組み合わせる方法が有効です。各文字を1つずつ判定して子音を除外するため、処理内容が直感的で読みやすいのが特徴です。
>>> consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm',
... 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']
>>> s = "Hello people"
>>> ''.join(c for c in s if c.lower() not in consonants)
'eo eoe'
まとめ:使い分けの目安
- 柔軟にパターンを制御したい場合 →
re.sub()+ 「|」で連結した子音リスト - 母音だけ残せばよく、空白や数字も削除して問題ない場合 →
re.sub('[^aeiou]', ...) - 可読性を重視したい、または正規表現を避けたい場合 → 内包表記 +
join()
なお、大量のテキストを高速に処理したい場合は、str.translate() と str.maketrans() を組み合わせると、削除対象文字をまとめて指定でき、正規表現よりも高速に動作することがあります。用途やデータ量に応じて最適な方法を選びましょう。
-
Python 3のtkinterでファイルダイアログから文字列(ファイルパス)を取得する方法
tkinterアプリケーションでファイルシステムを操作したい場合には、filedialogモジュールを利用します。このモジュールは、システム上のファイルを扱うための仕組みを提供しており、さまざまな種類のファイルダイアログを簡単に作成できる組み込み関数を多数備えています。用途に応じて任意のfiledialog関数を選択し、アプリケーションに組み込むことが可能です。中でも最もよく使われているのがfiledialog.askopenfilename()です。この関数を呼び出すと、ユーザーにファイルを開かせるためのダイアログが表示され、選択されたファイルのパスを文字列として受け取ることができます。サン
-
Python Tkinterのキャンバスから描画した線を削除する方法
TkinterのCanvas(キャンバス)ウィジェットは、GUIアプリケーション開発において非常に多くの場面で活用される便利な部品です。図形の描画はもちろん、グラフィックスや画像の作成など、さまざまな用途に使用できます。キャンバス上に線を描画するには、create_line(x, y, x1, y1, **options) メソッドを使用します。Tkinterでは、実線と破線の2種類の線を描くことが可能です。作成した線をアプリケーションから削除したい場合は、delete() メソッドを使います。このメソッドに削除対象のアイテムIDを渡すことで、指定した図形だけをキャンバスから取り除くことができ