【Python】正規表現を使って文字列が特定の部分文字列で始まるかどうかを判定する方法
はじめに
プログラムを書いていると、ある文字列が特定の部分文字列(サブストリング)で始まっているかどうかを確認したい場面があります。Pythonでは、標準ライブラリの「re」モジュールを使った正規表現によって、これをシンプルに実装できます。本記事では、文字列と部分文字列を引数として受け取り、「search」メソッドで先頭一致を判定する関数の作り方を、サンプルコードとともにわかりやすく解説します。
サンプルコード
以下は、正規表現を使って文字列の先頭が指定した部分文字列と一致しているかを判定するコード例です。
import re
def check_string(my_string, sub_string):
# まず部分文字列が文字列内に存在するかを確認
if (sub_string in my_string):
# 「^」(先頭を表すアンカー)を部分文字列の前に付けてパターンを作成
pattern = "^" + sub_string
result = re.search(pattern, my_string)
if result:
print("文字列は指定された部分文字列で始まっています")
else:
print("文字列は指定された部分文字列で始まっていません")
else:
print("指定された文字列は部分文字列ではありません")
my_string = "Python coding is fun to learn"
sub_string = "Python"
print("対象の文字列:")
print(my_string)
print("部分文字列:")
print(sub_string)
check_string(my_string, sub_string)
実行結果
対象の文字列:
Python coding is fun to learn
部分文字列:
Python
文字列は指定された部分文字列で始まっています
コードの解説
- まず、正規表現を扱うための「re」モジュールをインポートします。
- 「check_string」という名前の関数を定義し、引数として対象の文字列と部分文字列を受け取ります。
- 最初に「in」演算子を使い、部分文字列が文字列内にそもそも存在するかどうかを確認します。存在しなければ、その時点で「部分文字列ではない」と出力して終了します。
- 存在する場合は、正規表現の「^」(文字列の先頭を表すメタ文字)を部分文字列の先頭に連結し、検索用パターンとして新しい変数に代入します。
- 「search」メソッドを使って、このパターンが文字列内にマッチするかどうかを調べ、その結果を変数に格納します。
- 結果が真(True)であれば「部分文字列で始まっている」ことを示すメッセージを、そうでなければ「始まっていない」ことを示すメッセージをコンソールに出力します。
- 関数の外側で、対象となる文字列と部分文字列をそれぞれ定義し、コンソールに表示します。
- 最後に、文字列と部分文字列を引数として関数を呼び出し、判定結果をコンソールに表示します。
ポイント:「^」アンカーの役割
正規表現における「^」は、文字列の先頭位置を表す特殊文字(アンカー)です。パターンの先頭に「^」を付けることで、文字列の途中に部分文字列が含まれている場合でもマッチせず、必ず先頭からの一致だけを判定できるようになります。これにより、単なる「含まれているか」のチェックではなく、「先頭で始まっているか」という厳密な判定が可能になります。
補足:re.matchとの違いと注意点
同様の目的には「re.match」メソッドを使う方法もあります。「match」は常に文字列の先頭からマッチを試みるため、「^」を明示しなくても先頭一致の判定が可能です。また、部分文字列に「.」「*」「+」などの正規表現の特殊文字が含まれる場合は、意図しないマッチを防ぐために「re.escape()」でエスケープしておくと安全です。
まとめ
Pythonの「re」モジュールと「^」アンカーを組み合わせれば、文字列が特定の部分文字列で始まるかどうかを簡潔に判定できます。まず「in」演算子で存在確認を行い、その後に先頭一致の判定へ進むという二段階の構成にすることで、コードの意図も明確になり、可読性の高い実装になります。
-
Pythonで指定されたインデックスに基づいて文字列をシャッフルする方法
文字列 s とインデックスのリスト ind が与えられ、両者は同じ長さであるとします。文字列 s は、位置 i にある文字が最終的な文字列内の ind[i] の位置へ移動するようにシャッフルされます。このとき、シャッフル後の最終的な文字列を求める必要があります。例えば、入力が s = ktoalak、ind = [0,5,1,6,2,4,3] の場合、出力は kolkata となります。解決手順この問題を解くには、以下の手順に従います。fin_str を s と同じサイズのリストとして作成し、0で初期化するs 内の各インデックス i と各文字 v に対して、次の操作を行うfin_str[ind
-
Pythonで文字列が指定した接尾辞(サフィックス)で終わっているかどうかを確認する方法
endswith()メソッドを使う方法Pythonでは、文字列クラスに用意されている endswith() メソッドを使うことで、文字列が特定の接尾辞(サフィックス)で終わっているかどうかを簡単に確認できます。このメソッドは、検索したい接尾辞の文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。以下のように使用します。string = C:/Users/TutorialsPoint1/~.py print(string.endswith(.py))実行結果:Trueこの例では、ファイルパスの文字列が .py という拡張子で終わっているため、True が返されます。もし終わってい