Pythonで文字列から数値を抽出する方法を徹底解説
Pythonでは、文字列に含まれる数値を抽出する方法がいくつかあります。ここでは、代表的な手法である isdigit() メソッドを使った例を中心に、初心者にもわかりやすく解説します。
文字列から1桁ずつ数字を抽出する
文字列内の各文字を順番に調べ、数字だけを出力する最もシンプルな方法です。isdigit() メソッドは、対象の文字が数字であれば True を返します。
>>> str1 = 'a34e 345 bcd 5he 78 xyz' >>> for s in str1: ... if s.isdigit(): ... print(s) ... 3 4 3 4 5 5 7 8
このコードでは、forループで文字列を1文字ずつ取り出し、isdigit() で数字かどうかを判定しています。その結果、文字列中に含まれるすべての数字が1桁ずつ出力されます。
空白区切りの文字列から整数のみを抽出する
単語がスペースで区切られた文字列から、整数だけを抜き出したい場合は、split() メソッドと組み合わせるのが効果的です。
>>> str1 = 'h3110 23 cat 444.4 rabbit 11 2 dog' >>> for s in str1.split(): ... if s.isdigit(): ... print(s) ... 23 11 2
split() で文字列を空白ごとに分割し、各要素が数字のみで構成されているかを判定します。「h3110」はアルファベットを含み、「444.4」は小数点を含むため除外され、「23」「11」「2」といった純粋な整数だけが出力されます。
正規表現を使ったより柔軟な抽出方法
より複雑な条件で数値を抽出したい場合は、標準ライブラリの re モジュール(正規表現)を活用すると便利です。
>>> import re >>> str1 = 'h3110 23 cat 444.4 rabbit 11 2 dog' >>> re.findall(r'\d+', str1) ['3110', '23', '444', '11', '2']
パターン \d+ は「1桁以上の連続した数字」にマッチします。小数点も含めて抽出したい場合は、r'\d+\.?\d*' のようなパターンに変更することで対応できます。
まとめ
1文字ずつの判定には isdigit()、単語単位の整数抽出には split() との組み合わせ、柔軟なパターンマッチングには正規表現が適しています。用途に応じて使い分けることで、文字列処理を効率的に行えます。
-
Pythonで文字列と数値を連結する方法をわかりやすく解説
Pythonで文字列と数値を連結する基本の方法Pythonでは、文字列と数値をそのまま + 演算子で結合することはできません。連結するには、str() 関数を使って数値を文字列型に変換する必要があります。以下は基本的な例です。>>> a = string >>> b = 1 >>> print(a + str(b)) string1このように str(b) によって数値 1 が文字列 1 に変換され、文字列同士として正しく連結されます。Python 2で使えたバッククォート記法についてPython 2では、数値をバッククォート(`)で囲むこ
-
Pythonで文字列から数字を抽出する方法【isdigitと正規表現の使い分け】
正の整数だけを抽出するシンプルな方法文字列に含まれる正の整数だけを取り出したい場合は、split()で空白ごとに文字列を分割し、isdigit()で各要素が数字のみで構成されているかを判定する方法が手軽です。>>> s = h3110 23 cat 444.4 rabbit 11 2 dog >>> [int(x) for x in s.split() if x.isdigit()] [23, 11, 2]この方法では、すべてが数字で構成された要素だけが整数に変換されてリストに追加されます。そのため「h3110」のように文字と数字が混ざった語句や、「444.