ワイルドカード文字列のセットに対して単一の文字列を一致させるソリューションを探しています。例えば
>>> match("ab", ["a*", "b*", "*", "c", "*b"])
["a*", "*", "*b"]
出力の順序は重要ではありません。
10^4 のワイルドカード文字列の順序で照合し、約 10^9 のマッチ コールを行います。これは、おそらく次のようにコードを書き直す必要があることを意味します。
>>> matcher = prepare(["a*", "b*", "*", "c", "*b"]
>>> for line in lines: yield matcher.match("ab")
["a*", "*", "*b"]
ワイルドカードを処理する Python でのトライ実装の作成を開始しましたが、これらのコーナー ケースを正しく処理する必要があります。それにもかかわらず、私は聞いてみたいと思っています。これをどのように解決しますか?これをより速く解決できるPythonライブラリはありますか?
これまでのいくつかの洞察:
- 名前付き (Python, re) 正規表現は、1 つの一致しか返さないため、ここでは役に立ちません。
- pyparsingは素晴らしいライブラリのように見えますが、ドキュメントがまばらであり、複数のパターンのマッチングをサポートしていないようです。