Pythonでre.compileを使用しないでください

この記事では、主にPythonでre.compileを使用しない理由に関する関連情報を紹介します。この記事で紹介するサンプルコードは非常に詳細です。Pythonを学習または使用するための特定の参照学習値があります。 、ここに来て一緒に勉強しましょう。

インターネットでPythonの正規表現を検索すると、次のようなコードを記述したジャンク記事がたくさん表示されます。

import re
 
pattern = re.compile('正则表达式')
text = '一段字符串'
result = pattern.findall(text)

これらの記事の著者は、他の言語の悪い習慣に影響されているか、他のジャンク記事に惑わされて、考えずに使用した可能性があります。

Pythonでは、re.compileを使用する必要はありません。

これを証明するために、Pythonのソースコードを見てみましょう。

PyCharmに入力してください:

import re
 
re.search

次に、WindowsユーザーはキーボードのCtrlキーを押しながらマウスの左ボタンで検索をクリックします。Macユーザーはキーボードのコマンドキーを押しながらマウスの左ボタンで検索をクリックします。PyCharmは自動的にPythonreモジュールにジャンプします。ここでは、findall、search、sub、matchのいずれであっても、一般的に使用される正規表現メソッドはすべて次のように記述されています。

_compile(pattern, flag).对应的方法(string)

例えば:

def findall(pattern, string, flags=0):
 """Return a list of all non-overlapping matches in the string.
 
 If one or more capturing groups are present in the pattern, return
 a list of groups; this will be a list of tuples if the pattern
 has more than one group.
 
 Empty matches are included in the result."""
 return _compile(pattern, flags).findall(string)

次に、コンパイルを見てみましょう。



def compile(pattern, flags=0):
 "Compile a regular expression pattern, returning a Pattern object."
 return _compile(pattern, flags)
 

問題がわかりますか?

私たちが一般的に使用する正規表現メソッドはすべて、独自のコンパイルを備えています。

最初に再コンパイルしてから正規表現メソッドを呼び出す必要はありません。

この時点で、誰かが反論する可能性があります。

100万個の文字列があり、特定の正規表現を使用して一致させる場合、次のようなコードを記述できます。

texts = [包含一百万个字符串的列表]
pattern = re.compile('正则表达式')
for text in texts:
 pattern.search(text)

現時点では、re.compileは1回だけ実行され、次のようなコードを記述した場合:


2
3
 
texts = [包含一百万个字符串的列表]
for text in texts:
 re.search('正则表达式', text)
 

これは、下部にある同じ正規表現で100万回の再コンパイルを実行するのと同じです。

話は安いです、コードを見せてください。

次の図に示すように、ソースコードを見てみましょう。正規表現re.compileは_compileを呼び出し、_compileのソースコードを見てみましょう。

赤いボックスのコードは、_compileに独自のキャッシュが付属していることを示しています。タイプ(パターン)、パターン、フラグで構成される最大512個のキーが自動的に格納されます。同じ正規表現と同じフラグである限り、_compileが2回呼び出されると、キャッシュは2回目に直接読み取られます。

要約すると、手動でre.compileを呼び出すのをやめてください。これは、他の言語から持ち込まれた悪い習慣です。

総括する

以上がこの記事の全内容です。この記事の内容が、皆さんの勉強や仕事に一定の参考学習価値を持ってくれることを願っています。

私はPython開発エンジニアであり、Web開発、クローラー、データ分析、データ視覚化、機械学習、インタビューコレクションへの基本的なPythonスクリプトを含む、最新のPythonシステム学習チュートリアルのセットをまとめました。これらの資料が必要な場合は、エディターに注意を払い、Qスカート851211580を追加してPythonの学習資料と学習ビデオを入手し、偉大な神からのオンラインガイダンスを入手してください。

おすすめ

転載: blog.csdn.net/pyjishu/article/details/105413660