以下に、ワイルドカードマッチングのさまざまな方法とコード例をいくつか紹介します。
-
ブルートフォース法: ブルートフォース法は、パターンと文字列を一文字ずつ比較する方法です。パターンの各文字に対して、文字列の同じ位置の文字と一致しているかどうかを調べます。特殊文字の場合は、一致しないことを許容します。この方法はシンプルですが、計算量が大きくなる可能性があります。
def wildcard_match(pattern, string): if pattern == string: return True if pattern == '*': return True if len(pattern) > 1 and pattern[0] == '*' and wildcard_match(pattern[1:], string): return True if len(pattern) > 1 and pattern[-1] == '*' and wildcard_match(pattern[:-1], string): return True if pattern[0] == string[0] and wildcard_match(pattern[1:], string[1:]): return True return False
def wildcard_match(pattern, string):
memo = {}
def match(i, j):
if (i, j) in memo:
return memo[(i, j)]
if i == len(pattern) and j == len(string):
return True
if i == len(pattern) or j == len(string):
return False
if pattern[i] == '?' or pattern[i] == string[j]:
return match(i + 1, j + 1)
if pattern[i] == '*':
if match(i + 1, j) or match(i, j + 1):
return True
memo[(i, j)] = False
return False
return match(0, 0)
これらはワイルドカードマッチングの一部の方法とコード例です。実際の使用ケースに応じて、最適な方法を選択することが重要です。また、文字列処理やパターンマッチングに関連する他のアルゴリズムやライブラリもありますので、必要に応じて調査して利用してください。