PythonおよびJavaでコンパイル済み正規表現を使用するメリット比較検証して分かったこと

「Python」や「Java」でプログラミングを行う場合、コンパイル済み正規表現を使うとテキスト操作ルーティンの速度が大幅に向上する。

» 2024年03月07日 08時00分 公開
[Walker AldridgeTechTarget]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 先日、URL文字列から指定したパラメーターを削除する「最善」の方法についての議論に参加した。

 この議論は、文字列プリミティブを使ってパラメーターを分割してから再度結合する方法から始まった。この手法は分かりやすく読みやすい。1行か2行の正規表現を使っても同じ結果を得ることができる。だが、正規表現(regex)は非常に時間がかかるといわれている。一般的には時間がかかることは間違いない。

 とはいえ、正規表現と文字列プリミティブではかかる時間がどの程度違うのか、事前コンパイル済みの正規表現を使うとパフォーマンスは向上するのかという点では疑問が残る。

文字列操作によってパラメーターを削除する

 パラメーターを削除する最も簡単で恐らく最も分かりやすいのは、分割プリミティブを使って文字列を分割し、指定されたパラメーターを削除してから再結合する方法だ。

 この方法は筆者にとっては大変な作業のように感じられ、ほとんどの言語で文字列が変更不可になっていることを考えると、メモリを大量に使用する可能性が高い。

 「Java」では、この操作を次の4行のコードで実現できる。

String[] parts = input.split("&");
List<String> partsList = new ArrayList<>(Arrays.asList(parts));
partsList.removeIf(part -> part.contains("option"));
outputsSplit = String.join("&",partsList);

 「Python」では、次のようにコードが短く、簡潔になる。

parts = input.split("&")
parts = [part for part in parts if "option" not in part]
output = '&'.join(parts) 
Both do the same thing: manipulate and rejoin a split list.

正規表現を使ってパラメーターを削除する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。