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

Pythonの正規表現でキャメルケース(CamelCase)の単語間にスペースを挿入する方法

ここで解決したい課題は、CamelCase(キャメルケース)で書かれた文字列を、個々の単語に分割して読みやすい形に変換することです。この問題は、正規表現を使えばシンプルに解決できます。基本的な考え方は、「対象の文字列内に含まれるすべての大文字を検出し、その直前にスペースを挿入する」というものです。Pythonでは、標準ライブラリのreモジュールが提供するsub()メソッドを使うことで、この処理を簡単に実装できます。

変換イメージ

例として、次の入力文字列を考えます。

AReallyLongVariableNameInJava

この文字列に対して処理を行うと、次のような出力が得られることが期待されます。

A Really Long Variable Name In Java

実装方法:re.sub()を使った置換

すべての大文字を検出するには、正規表現パターン[A-Z]を使用します。そして、マッチした大文字を「スペース+同じ文字」に置き換えることで、単語同士の間にスペースを挿入できます。reパッケージを使った実装例は以下のとおりです。

コード例

import re

# すべての大文字をグループとして検出し、
# スペースを先頭に付けた \1(後方参照)で置き換える。
# 先頭の大文字の前に挿入された余分なスペースは strip() で除去する。
separated_str = re.sub("([A-Z])", " \\1", "AReallyLongVariableNameInJava").strip()
print(separated_str)

このコードのポイントは次のとおりです。

  • ([A-Z]):大文字1文字をグループとしてキャプチャします。後から参照できるようにするためです。
  • " \\1":マッチした文字を、スペース+元の文字に置き換えます。\\1はキャプチャしたグループへの後方参照です。
  • .strip():置換によって先頭の大文字(最初の「A」)の前にできてしまう不要なスペースを取り除きます。

実行結果

このスクリプトを実行すると、次の出力が得られます。

A Really Long Variable Name In Java

まとめ

このように、re.sub()と正規表現[A-Z]を組み合わせれば、数行のコードでキャメルケースの文字列を単語ごとに分割できます。変数名やクラス名を人間が読みやすい形式に整形したい場合などに、非常に便利なテクニックなので、ぜひ覚えておきましょう。

  1. CSSで文章の単語間のスペースを追加・削除する方法

    word-spacing(ワードスペーシング)プロパティは、文章内の単語と単語の間隔を広げたり狭めたりするために使用されるCSSプロパティです。指定できる値は「normal」(ブラウザの標準設定)または、間隔の幅を示す数値(px、emなどの単位付き)です。 値についての補足 normal: ブラウザが定義する通常の単語間隔を適用します。 正の数値: 標準の間隔よりも単語同士のスペースを広げます。例:「8px」 負の数値: 標準の間隔よりもスペースを狭め、単語を詰めて表示します。例:「-2px」 サンプルコード 以下のコードを実行すると、word-spacingプロパティによる単語間隔の変化

  2. CSSのletter-spacingプロパティを使って文字間隔(字間)を設定する方法

    CSSのletter-spacingプロパティを使用すると、テキストの文字と文字の間隔(字間)を自由に指定できます。値にはnormalのほか、pxやemなどの長さの単位を指定でき、タイトルや見出しのデザイン性を高めたり、可読性を調整したりする際に非常に便利です。 基本の構文 letter-spacing: normal | <length>; normalを指定するとブラウザ標準の間隔になり、数値を指定するとその分だけ文字間が広がります。負の値を指定すれば、文字間を詰めることも可能です。 サンプル1:em単位で文字間隔を指定する 以下の例では、最初のp要素だけにletter-spa