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

【Python入門】正規表現でテキストから数値を抽出する方法をわかりやすく解説

Pythonでテキスト処理を行う際、「文章の中から数字だけを取り出したい」という場面は非常によくあります。そんなときに活躍するのが、標準ライブラリの re モジュールと正規表現です。この記事では、目的別に使える抽出パターンをサンプルコード付きで解説します。

数字を1文字ずつ個別に抽出する

テキスト内のすべての数字を1桁ずつバラバラに抽出したい場合は、正規表現パターン \d を使用します。\d は「半角数字1文字」にマッチするメタ文字です。

サンプルコード

import re

s = '12345 abcdf 67'
result = re.findall(r'\d', s)
print(result)

実行結果

['1', '2', '3', '4', '5', '6', '7']

re.findall() は、パターンにマッチしたすべての文字列をリストとして返します。この例では、英字部分「abcdf」や空白は無視され、数字だけが順番に取り出されています。

連続する数値をまとめて抽出する

「12345」や「67」のように、連続した数字をひとつの数値のかたまりとして取得したい場合は、\d の後ろに + を付けた \d+ を使います。+ は「直前のパターンの1回以上の繰り返し」を意味するため、1桁以上の数字の並び全体にマッチします。

サンプルコード

import re

s = '12345 abcdf 67'
result = re.findall(r'\d+', s)
print(result)

実行結果

['12345', '67']

このように、\d\d+ を使い分けるだけで、抽出結果の粒度を自由にコントロールできます。

応用:小数や負の数も含めて抽出する

実務では、小数点以下やマイナス記号を含む数値を扱いたいケースもあります。その場合は、パターンを少し工夫しましょう。

サンプルコード

import re

s = '気温は -12.5度、円周率は 3.14 です'
result = re.findall(r'-?\d+\.?\d*', s)
print(result)

実行結果

['-12.5', '3.14']
  • -? … マイナス記号があれば(なくても)マッチさせる
  • \.? … 小数点があればマッチさせる
  • \d* … 小数部の数字が0桁以上あればマッチさせる

まとめ

  • \d:数字を1文字ずつ個別に抽出できる
  • \d+:連続する数字をかたまり(整数)として抽出できる
  • 小数や負の数にも対応させたい場合は、-?\d+\.?\d* のようなパターンを組み合わせる

なお、上記のコードはPython 3系を想定しています。古い資料では print result のように括弧なしで書かれていることがありますが、Python 3以降では print() は関数なので必ず括弧を付けてください。

  1. 【Java】正規表現を使って文字列から数値を抽出する方法をわかりやすく解説

    Javaで文字列に含まれる数値(数字の並び)を抽出したい場合、正規表現を使うのが最も簡単な方法です。文字列から数値にマッチさせるには、以下のいずれかの正規表現パターンを使用します。 \\d+ または ([0-9]+) 「\\d+」は1桁以上の連続した数字にマッチするパターンで、「([0-9]+)」は0〜9の数字が1回以上繰り返される部分にマッチします。どちらを使っても結果は同じになります。 抽出処理では、java.util.regexパッケージのPatternクラスとMatcherクラスを使用します。Patternクラスで正規表現をコンパイルし、Matcherクラスのfind()メソッドでマッ

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

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