Python - 文字列から数字のみを抽出する方法

Stringから数字のみを抽出する方法を紹介します。

1. すべての数字を1つの文字列に抽出

re.sub() の Syntax は次のようになります。

sub()stringpattern と一致する文字を repl に置き換えます。

re.sub(pattern, repl, string)

次のように sub() を使用して、文字列から数字以外の文字をすべて削除し、数字で構成される文字列を作成できます。

import re

string = 'aaa1234, ^&*2233pp'
numbers = re.sub(r'[^0-9]', '', string)
print(numbers)

Output:

12342233

2. 連続した数字を抽出してリストに戻す

re.findall(pattern, string) は、文字列内の pattern に対応する内容を見つけてリストに返します。

r'\d+'は、1回以上繰り返される数字のパターンを意味します。

次のように、連続した数字を1つのIntegerに抽出します。

import re

string = 'aaa1234, ^&*2233pp'
numbers = re.findall(r'\d+', string)
print(numbers)

Output:

['1234', '2233']

3. 文字列パターン内の数値抽出

たとえば、"Request 12345 Finished" などの文字列から中央の数字を抽出したい場合があります。

つまり、 Request (pattern) Finished と同じ形式で、フォーマットは固定されているが中央の数字だけ異なる状況です。

こういうときは、以下のように正規表現で中数字だけ読むことができます。

import re

str = "Request 12345 Finished."
pattern = "Request ([0-9]+) Finished."

result = re.search(pattern, str)
print(result.group(1))

Output:

12345

ちなみに、 group(1) は一致するグループの中で一番最初の項目を意味し、 group(0) は入力された文字列を意味します。

groupについてもっと知るために、以下のように2つのグループを持つパターンを作成して実行結果を見ると、group(1)とgroup(2)が出力するものと、groups()が出力するものが何であるかがわかります。 。

import re

str = "Request 12345 Finished. 67890"
pattern = "Request ([0-9]+) Finished. ([0-9]+)"

result = re.search(pattern, str)
print(result.group(0))
print(result.group(1))
print(result.group(2))
print(result.groups())

Output:

Request 12345 Finished. 67890
12345
67890
('12345', '67890')

4. 数字抽出とバッチで分離してリストに戻す

r'\d は 1 つの数字を意味します。

1 つ以上の繰り返しを意味する + が除外されたパターンでパターンを探すと、数字 1 個単位で抽出され、リストに保存されます。

import re

string = 'aaa1234, ^&*2233pp'
numbers = re.findall(r'\d', string)
print(numbers)

Output:

['1', '2', '3', '4', '2', '2', '3', '3']

References

Related Posts

codechachaCopyright ©2019 codechacha