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

キャメルケースをスネークケースに変換するPython関数の書き方

プログラミングでは、命名規則の異なるコードを扱う際に、キャメルケース(camelCase)をスネークケース(snake_case)へ変換したい場面がよくあります。この記事では、Pythonの正規表現モジュール re を使った変換関数の実装方法をわかりやすく解説します。

キャメルケースとスネークケースとは

キャメルケースは、各単語の先頭を大文字にしてつなげる記法で、JavaやJavaScriptなどで広く使われています。一方、スネークケースは単語をアンダースコア「_」でつなぐ記法で、PythonではPEP 8によって推奨される標準的な命名スタイルです。

例えば、「JavaBeans」というキャメルケースの文字列は、「java_beans」というスネークケースに変換できます。

変換用のPythonコード

以下が、キャメルケースをスネークケースに変換する関数の実装例です。

import re

def convert(name):
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()

print(convert('JavaBeans'))
print(convert('JavaStrutsSwing'))

実行結果

java_beans
java_struts_swing

コードの仕組み

この関数は、2段階の正規表現置換と小文字化によって変換を実現しています。

  • 1回目の置換: パターン (.)([A-Z][a-z]+) で「任意の1文字の直後に、大文字で始まり小文字が続く部分」を検出し、その間にアンダースコアを挿入します。「JavaBeans」はこの段階で「Java_Beans」になります。
  • 2回目の置換: パターン ([a-z0-9])([A-Z]) で「小文字または数字の直後に大文字が続く箇所」を検出し、同様にアンダースコアを挿入します。これにより、連続する大文字を含むケースにも対応できます。
  • 最後の lower(): 文字列全体を小文字に変換し、スネークケースとして完成させます。

注意点

古いサンプルコードでは print convert(...) というPython 2の構文が使われていることがありますが、Python 3では print(convert(...)) のように括弧で囲む必要があるため、実行環境に合わせて書き方を調整してください。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print