Pythonにおけるネストした文字クラスの減算の仕組みをわかりやすく解説
ネストした文字クラスの減算とは
文字クラスの減算では、減算される側の文字クラスの中で完全な文字クラス構文を使用できるため、さらにその内部で別のクラスを減算する、いわゆる「ネスト」が可能です。
例えば、[0-9-[0-7-[0-3]]] という正規表現を見てみましょう。まず 0-7 から 0-3 を減算すると [0-9-[4-7]] となり、これは [0-38-9] と同等の意味になります。結果として、このパターンは「012389」のいずれかの1文字にマッチします。
減算は必ず文字クラスの最後の要素に記述する
文字クラスの減算は、常に文字クラスの最後の要素として記述しなければなりません。例えば、[0-9-[4-7]a-d] のような書き方は不正な正規表現となります。これを有効な形に直すには、[0-9a-d-[4-7]] のように書き換えます。減算の対象となるのは、角括弧内の文字クラス全体である点に注意してください。
複数のクラスを続けて減算することはできない
ネストした文字クラスの減算は利用できますが、2つのクラスを順番に続けて減算することはできません。例えば、すべてのUnicode文字(\p{L})からASCII文字とアラビア文字の両方を除外したい場合には、まずASCII文字とアラビア文字を1つのクラスにまとめ、それをまとめて減算します。
[\p{L}-[\p{IsBasicLatin}\p{IsArabic}]]
このように書くことで、「Unicodeのすべての文字のうち、基本ラテン文字とアラビア文字を除いたもの」にマッチする正規表現になります。複数の範囲を除外したい場面では、減算したいクラス同士を1つの文字クラス内に併記するのがポイントです。
-
Pythonにおけるアンダースコア(_)の意味と使い方をわかりやすく解説
Pythonでは、アンダースコア(_)は特別な役割を持つ記号です。一見ただの文字に見えますが、実際にはインタープリタの動作や命名規則、数値リテラルの表記など、さまざまな場面で重要な働きをします。この記事では、Pythonでアンダースコアが使われる主な5つのケースを、コード例とともにわかりやすく解説します。1. インタープリタで直前の式の値を保持するPythonの対話モード(インタープリタ)では、直前に評価した式の結果が、特別な変数「_」に自動的に格納されます。計算結果をすぐに再利用したいときに非常に便利です。使用例>>> 12 + 10 22 >>> _ 2
-
Pythonでmkdir -pと同じようにディレクトリを再帰的に作成する方法
mkdir -pとは?UnixやLinuxのコマンドであるmkdir -pは、親ディレクトリが存在しない場合でも、必要な階層のディレクトリをまとめて一括作成できる便利なオプションです。また、指定したディレクトリがすでに存在していてもエラーにならず、そのまま処理が続行されます。Pythonでmkdir -pと同等の処理を行うにはPythonで同じことを実現するには、標準ライブラリのosモジュールにあるos.makedirs()関数を使用します。この関数に作成したいパスを渡すことで、中間の親ディレクトリも含めて再帰的にディレクトリを作成できます。exists_ok=True を指定するデフォルトで