Pythonの正規表現で小文字の母音をマッチさせて抽出する方法
Pythonでは、標準ライブラリのreモジュールを使うことで、正規表現による柔軟な文字列操作が可能です。文字列の中から小文字の母音(a・e・i・o・u)だけを取り出したい場合は、文字クラス[aeiou]を利用するのが最もシンプルで効率的な方法です。
サンプルコード
import re foo = 'AefuToiJnmna' match = re.findall(r'[aeiou]', foo) print(match)
実行結果
このコードを実行すると、次のような出力が得られます。
['e', 'u', 'o', 'i', 'a']
コードの解説
文字クラス [aeiou] は、角括弧の中に並べた文字のうち「いずれか1文字」に一致することを意味します。つまり、このパターンは対象の文字列から、a・e・i・o・u のどれかに該当するすべての小文字を検出します。
re.findall() は、パターンに一致したすべての部分をリスト形式で返す関数です。上記の例では、入力文字列 'AefuToiJnmna' に含まれる小文字の母音だけが出現順に抽出されています。大文字の「A」「T」「J」などはパターンに一致しないため、結果には含まれない点に注目してください。
注意点
- 文字クラス内ではカンマなどの区切り文字は不要です。
[a,e,i,o,u]のように書いてしまうと、カンマ自体も一致対象になってしまうため注意しましょう。 - このパターンはあくまで小文字のみに一致します。大文字の母音は無視されます。
応用:大文字・小文字を区別せずに抽出する
大文字の母音も一緒に取得したい場合は、大文字小文字を無視するフラグ re.IGNORECASE を指定します。
import re foo = 'AefuToiJnmna' match = re.findall(r'[aeiou]', foo, flags=re.IGNORECASE) print(match)
実行結果:
['A', 'e', 'u', 'o', 'i', 'a']
このように、文字クラスと re.findall() を組み合わせるだけで、特定の種類の文字を簡単に抽出できます。数字なら [0-9]、英字なら [a-zA-Z] のように範囲指定することもできるので、さまざまな場面で応用できます。
-
Pythonの正規表現で単語以外の文字をマッチさせる方法
正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ