Pythonの正規表現を使って文字列から数字のみを抽出・マッチングする方法
Pythonでは、標準ライブラリの re モジュールを使うことで、正規表現によるパターンマッチングが簡単に行えます。文字列から「数字のみ」を取り出したい場合は、メタ文字 \d(任意の1桁の数字に一致)を使用します。
ここでは、代表的な2つの方法——re.search() と re.findall() を使った例を紹介します。なお、コードはPython 3系の記法に準拠しています。
例1:re.search() で最初に見つかった数字の並びを取得する
次のコードは、指定した文字列の中から最初に出現する連続した数字(1桁以上)を検索し、マッチオブジェクトとして返します。
import re m = re.search(r'\d+', '5Need47forSpeed 2') print(m)
実行結果
<re.Match object; span=(0, 1), match='5'>
パターン \d+ の + は「直前の要素が1回以上繰り返される」ことを意味するため、連続した数字をひとまとまりとして取得できます。マッチした文字列そのものが必要な場合は、m.group() を呼び出すと '5' が得られます。
例2:re.findall() で文字列内のすべての数字をリストとして取得する
文字列に含まれるすべての数字を個別に抜き出したい場合は、re.findall() が便利です。マッチしたすべての部分文字列がリスト形式で返されます。
import re m = re.findall(r'\d', '5Need47forSpeed 2') print(m)
実行結果
['5', '4', '7', '2']
補足:連続した数字をまとめて抽出したい場合
パターンを r'\d+' に変更すると、隣り合う数字が1つの要素として扱われます。
import re m = re.findall(r'\d+', '5Need47forSpeed 2') print(m) # ['5', '47', '2']
このように、\d と量指定子(+ や *)を組み合わせることで、用途に応じて柔軟に数字を抽出できます。データの前処理やログ解析など、テキストから数値情報を取り出したい場面でぜひ活用してください。
-
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]パ