ニュース
PythonおよびJavaでコンパイル済み正規表現を使用するメリット:比較検証して分かったこと
「Python」や「Java」でプログラミングを行う場合、コンパイル済み正規表現を使うとテキスト操作ルーティンの速度が大幅に向上する。
先日、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.
関連記事
- 正規表現のマッチングをどこからでも―「境界アサーション」と「ルックアラウンドアサーション」
正規表現の基本と、ECMAScript(JavaScript)における利用方法を紹介する連載。今回は、「^」「$」など登場済みのものからECMAScript 2015以降で利用可能になった全てのアサーションについて。 - Pythonコーディングのベストプラクティス「PEP 8」を解説
TechTargetは、「開発チームのPythonコーディング標準」に関する記事を公開した。Pythonを使う開発チームのリーダーには、コード標準に関して2つの課題がある。スタイルガイドを作成することと、開発者にそれを守らせることだ。 - 一見それほど変わらないように思えるKotlinとScala、どう使い分けるべき?
ScalaとKotlinはどちらも、汎用プログラミング言語として多くの機能を提供する。とはいえ、ユースケースも同じというわけではない。