[Python] 正規表現で3桁の数字を判定・抽出する方法

Pythonで正規表現を使用して3桁の数字を判定・抽出するには、reモジュールを使います。

正規表現パターンとしては、\d{3}を使用します。

\dは数字を表し、{3}は3回繰り返すことを意味します。

例えば、re.search(r'\d{3}', text)で文字列textから最初に見つかった3桁の数字を抽出できます。

また、re.findall(r'\d{3}', text)を使うと、すべての3桁の数字をリストとして取得できます。

この記事でわかること
  • 正規表現を使った3桁の数字の判定方法
  • 文字列から3桁の数字を抽出する方法
  • 3桁の数字を含む文字列の操作方法
  • 電話番号や郵便番号の抽出例
  • 数字以外の文字を含めた判定方法

目次から探す

3桁の数字を判定・抽出する正規表現

正規表現は、特定のパターンにマッチする文字列を検索・操作するための強力なツールです。

ここでは、3桁の数字を判定・抽出するための正規表現について詳しく解説します。

3桁の数字を表す正規表現パターン

3桁の数字を表す正規表現パターンは、\d{3}です。

このパターンは、以下のように構成されています。

スクロールできます
パターン説明
\d数字を表すメタキャラクタ
{3}直前の要素(この場合は\d)が3回繰り返されることを示す

このパターンを使うことで、任意の3桁の数字を簡単に判定・抽出することができます。

\d{3}の意味と解説

\d{3}は、次のように解釈されます。

  • \dは、0から9までの任意の数字を表します。
  • {3}は、直前の\dが3回連続して出現することを要求します。

したがって、\d{3}は「3桁の数字」を意味します。

例えば、123456などがこのパターンにマッチしますが、121234はマッチしません。

3桁の数字を含む文字列の例

以下は、3桁の数字を含む文字列の例です。

  • 電話番号は123-4567です。
  • 商品コードは789です。
  • 郵便番号は987-6543です。

これらの文字列には、3桁の数字が含まれています。

正規表現を使用することで、これらの数字を簡単に抽出することが可能です。

Pythonで3桁の数字を判定する方法

Pythonでは、reモジュールを使用して正規表現を扱うことができます。

ここでは、3桁の数字を判定するための方法を紹介します。

re.search()を使った判定

re.search()関数は、文字列の中に指定したパターンが含まれているかどうかを判定します。

以下は、3桁の数字を判定するサンプルコードです。

import re
# 判定したい文字列
text = "電話番号は123-4567です。"
# 3桁の数字を判定
if re.search(r'\d{3}', text):
    print("3桁の数字が見つかりました。")
else:
    print("3桁の数字は見つかりませんでした。")
3桁の数字が見つかりました。

re.search()は、文字列全体を検索し、最初にマッチした部分を見つけます。

3桁の数字が含まれている場合、判定が成功します。

re.match()を使った判定

re.match()関数は、文字列の先頭からパターンがマッチするかどうかを判定します。

以下は、3桁の数字が文字列の先頭にあるかを判定するサンプルコードです。

import re
# 判定したい文字列
text = "123-4567は電話番号です。"
# 3桁の数字を判定
if re.match(r'\d{3}', text):
    print("文字列の先頭に3桁の数字があります。")
else:
    print("文字列の先頭に3桁の数字はありません。")
文字列の先頭に3桁の数字があります。

re.match()は、文字列の先頭からのみ検索を行うため、先頭に3桁の数字がある場合にのみ判定が成功します。

判定結果の確認方法

判定結果を確認する方法は、if文を使用して条件分岐を行うことです。

re.search()re.match()の戻り値は、マッチした場合はマッチオブジェクト、マッチしなかった場合はNoneになります。

これを利用して、判定結果を確認することができます。

以下は、判定結果を変数に格納して確認するサンプルコードです。

import re
# 判定したい文字列
text = "456-7890は電話番号です。"
# 3桁の数字を判定
match_result = re.search(r'\d{3}', text)
if match_result:
    print("3桁の数字が見つかりました:", match_result.group())
else:
    print("3桁の数字は見つかりませんでした。")
3桁の数字が見つかりました: 456

このように、判定結果を変数に格納することで、マッチした内容を取得することも可能です。

Pythonで3桁の数字を抽出する方法

Pythonのreモジュールを使用すると、文字列から特定のパターンにマッチする部分を抽出することができます。

ここでは、3桁の数字を抽出する方法を紹介します。

re.findall()を使った抽出

re.findall()関数は、文字列の中から指定したパターンにマッチするすべての部分をリストとして返します。

以下は、3桁の数字を抽出するサンプルコードです。

import re

# 抽出したい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"

# 3桁の数字を抽出(単独で存在する場合のみ)
three_digit_numbers = re.findall(r'(?<!\d)\d{3}(?!\d)', text)

print("抽出された3桁の数字:", three_digit_numbers)
抽出された3桁の数字: ['123', '987']

re.findall()を使用することで、文字列中のすべての3桁の数字を簡単に抽出することができます。

re.finditer()を使った抽出

re.finditer()関数は、文字列の中から指定したパターンにマッチする部分をイテレータとして返します。

これにより、マッチした部分に対してさらに詳細な操作を行うことができます。

以下は、3桁の数字を抽出するサンプルコードです。

import re
# 抽出したい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"
# 3桁の数字を抽出
matches = re.finditer(r'\d+', text)
# 4桁以上を排除
matches = [match for match in matches if len(match.group()) == 3]
# 抽出結果を表示
for match in matches:
    print("抽出された3桁の数字:", match.group())
抽出された3桁の数字: 123
抽出された3桁の数字: 987

re.finditer()を使用することで、マッチした部分に対してループ処理を行い、個別に操作することが可能です。

抽出結果の処理方法

抽出した3桁の数字に対して、さまざまな処理を行うことができます。

例えば、抽出した数字を整数に変換したり、特定の条件に基づいてフィルタリングしたりすることができます。

以下は、抽出した数字を整数に変換し、条件に基づいてフィルタリングするサンプルコードです。

import re

# 抽出したい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"

# 3桁の数字を抽出(単独で存在する場合のみ)
three_digit_numbers = re.findall(r'(?<!\d)\d{3}(?!\d)', text)

# 抽出結果を整数に変換し、条件に基づいてフィルタリング
filtered_numbers = [int(num) for num in three_digit_numbers if int(num) > 200]

print("条件を満たす3桁の数字:", filtered_numbers)
条件を満たす3桁の数字: [987]

このように、抽出した結果に対してさまざまな処理を行うことができ、柔軟なデータ操作が可能です。

3桁の数字を含む文字列の操作

Pythonのreモジュールを使用すると、3桁の数字を含む文字列に対してさまざまな操作を行うことができます。

ここでは、3桁の数字を置換、削除、カウントする方法を紹介します。

3桁の数字を置換する方法

re.sub()関数を使用すると、指定したパターンにマッチする部分を別の文字列に置換することができます。

以下は、3桁の数字を特定の文字列に置換するサンプルコードです。

import re

# 置換したい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"

# 3桁の数字を'XXX'に置換(単独で存在する場合のみ)
replaced_text = re.sub(r'(?<!\d)\d{3}(?!\d)', 'XXX', text)

print("置換後の文字列:", replaced_text)
置換後の文字列: 電話番号はXXX-4567、郵便番号はXXX-6543です。

このように、re.sub()を使用することで、3桁の数字を簡単に置換することができます。

3桁の数字を削除する方法

3桁の数字を削除する場合も、re.sub()関数を使用しますが、置換先を空文字列に設定します。

以下は、3桁の数字を削除するサンプルコードです。

import re

# 削除したい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"

# 3桁の数字を削除(単独で存在する場合のみ)
removed_text = re.sub(r'(?<!\d)\d{3}(?!\d)', '', text)

print("削除後の文字列:", removed_text)
削除後の文字列: 電話番号は-4567、郵便番号は-6543です。

このように、3桁の数字を削除することも簡単に行えます。

必要に応じて、削除後の文字列を整形することも可能です。

3桁の数字をカウントする方法

3桁の数字の出現回数をカウントするには、re.findall()を使用してマッチした部分をリストとして取得し、その長さを測ることができます。

以下は、3桁の数字の出現回数をカウントするサンプルコードです。

import re

# カウントしたい文字列
text = "電話番号は123-4567、郵便番号は987-6543です。"

# 3桁の数字を抽出(単独で存在する場合のみ)
three_digit_numbers = re.findall(r'(?<!\d)\d{3}(?!\d)', text)

# 出現回数をカウント
count = len(three_digit_numbers)

print("3桁の数字の出現回数:", count)
3桁の数字の出現回数: 2

このように、re.findall()を使用することで、3桁の数字の出現回数を簡単にカウントすることができます。

これにより、文字列内の特定のパターンの頻度を把握することが可能です。

応用例

ここでは、3桁の数字を含むさまざまな実用的なケースについて、具体的な抽出方法を紹介します。

電話番号、郵便番号、商品コードなど、日常的に扱うデータから3桁の数字を抽出する方法を見ていきましょう。

3桁の数字を含む電話番号の抽出

電話番号は通常、3桁の市外局番と4桁の番号から構成されています。

以下のサンプルコードでは、電話番号から3桁の市外局番を抽出します。

import re

# 抽出したい文字列
text = "連絡先は03-1234-5678または045-9876-5432です。"

# 3桁の市外局番を抽出
# 電話番号の形式に基づいて、3桁の市外局番を抽出
area_codes = re.findall(r'\d{3}(?=-\d{4}-\d{4})', text)

print("抽出された電話番号の市外局番:", area_codes)
抽出された電話番号の市外局番: ['045']

このように、電話番号から3桁の市外局番を抽出することができます。

必要に応じて、特定の形式にフィルタリングすることも可能です。

3桁の数字を含む郵便番号の抽出

日本の郵便番号は通常、3桁の数字と4桁の数字から構成されています。

以下のサンプルコードでは、郵便番号から3桁の部分を抽出します。

import re

# 抽出したい文字列
text = "郵便番号は123-4567と987-6543です。"

# 3桁の郵便番号の部分を抽出
postal_codes = re.findall(r'(\d{3})-\d{4}', text)

print("抽出された郵便番号の3桁部分:", postal_codes)
抽出された郵便番号の3桁部分: ['123', '987']

このように、郵便番号から3桁の部分を抽出することができます。

郵便番号の形式に応じて、正規表現を調整することも可能です。

3桁の数字を含む商品コードの抽出

商品コードには、3桁の数字が含まれていることがよくあります。

以下のサンプルコードでは、商品コードから3桁の数字を抽出します。

import re
# 抽出したい文字列
text = "商品コードはABC123、DEF456、GHI789です。"
# 3桁の数字を抽出
product_codes = re.findall(r'\d{3}', text)
print("抽出された商品コードの3桁部分:", product_codes)
抽出された商品コードの3桁部分: ['123', '456', '789']

このように、商品コードから3桁の数字を抽出することができます。

商品コードの形式に応じて、正規表現を調整することで、必要な情報を効率的に取得できます。

よくある質問

re.search()とre.match()の違いは?

re.search()re.match()は、どちらも正規表現を使用して文字列を検索するための関数ですが、以下のような違いがあります。

  • re.search(): 文字列全体を検索し、指定したパターンがどこかに存在するかを判定します。

マッチが見つかれば、その位置を返します。

  • re.match(): 文字列の先頭からのみ検索を行い、指定したパターンが先頭にあるかどうかを判定します。

先頭にマッチしない場合は、Noneを返します。

このため、re.search()は文字列の任意の位置でのマッチを確認できるのに対し、re.match()は先頭に限定される点が大きな違いです。

3桁以上の数字を抽出するにはどうすればいい?

3桁以上の数字を抽出するには、正規表現のパターンを\d{3,}と指定します。

これは「3回以上の数字」を意味します。

以下は、3桁以上の数字を抽出するサンプルコードです。

import re
# 抽出したい文字列
text = "数値は123、4567、89012です。"
# 3桁以上の数字を抽出
numbers = re.findall(r'\d{3,}', text)
print("抽出された3桁以上の数字:", numbers)
抽出された3桁以上の数字: ['4567', '89012']

このように、\d{3,}を使用することで、3桁以上の数字を簡単に抽出することができます。

正規表現で数字以外の文字も含めて判定できますか?

はい、正規表現を使用することで、数字以外の文字も含めて判定することが可能です。

例えば、特定の文字列の中に3桁の数字とその前後に特定の文字がある場合、以下のように正規表現を組み合わせて使用できます。

import re
# 判定したい文字列
text = "商品コードはABC123XYZです。"
# 3桁の数字を含む文字列を判定
if re.search(r'[A-Z]{3}\d{3}[A-Z]{3}', text):
    print("条件を満たす文字列が見つかりました。")
else:
    print("条件を満たす文字列は見つかりませんでした。")
条件を満たす文字列が見つかりました。

このように、正規表現を使うことで、数字以外の文字も含めた複雑なパターンを判定することができます。

必要に応じて、正規表現のパターンを調整することで、さまざまな条件に対応できます。

まとめ

この記事では、Pythonを使用して3桁の数字を判定・抽出する方法について詳しく解説しました。

正規表現を活用することで、電話番号や郵便番号、商品コードなど、さまざまなデータから3桁の数字を効率的に操作することが可能です。

これを機に、実際のプログラムに正規表現を取り入れて、データ処理のスキルを向上させてみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す