Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのワイルドカードマッチング


入力文字列sと別の入力文字列pがあるとします。これがメインの文字列で、pがパターンです。文字列のパターンに一致するメソッドを1つ定義する必要があります。したがって、「?」や「*」などのワイルドカード文字をサポートする正規表現にこれを実装する必要があります。

  • ドット「?」は任意の1文字に一致します

  • スター「*」は0個以上の文字に一致します。

したがって、たとえば、入力がs =“ aa”およびp =“ a?”の場合、それはtrueになります。同じ入力文字列に対して、パターンが“?*”の場合、trueになります。

これを解決するには、次の手順に従います-

  • ss:=sのサイズとps:=pのサイズ

  • dpをサイズssxpsの行列にし、false値を使用してこれを埋めます

  • これらの前に1つの空白スペースを追加して、pとsを更新します

  • 1からpsの範囲のiの場合-

    • p [i] =スターの場合、

      • dp [0、i]:=dp [0、i-1]

  • 1からssの範囲のiの場合

    • 1からpsの範囲のjの場合

      • s[i]がp[j]の場合、またはp [j]が「?」の場合、

        • dp [i、j]:=dp [i – 1、j – 1]

      • それ以外の場合、p [j]がスターの場合、

        • dp [i、j]:=dp [i – 1、j]およびdp [i、j – 1]

          の最大値
  • dp [ss、ps]

    を返します

例(Python)

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def isMatch(self, s, p):
      sl = len(s)
      pl = len(p)
      dp = [[False for i in range(pl+1)] for j in range(sl+1)]
      s = " "+s
      p = " "+p
      dp[0][0]=True
      for i in range(1,pl+1):
         if p[i] == '*':
            dp[0][i] = dp[0][i-1]
      for i in range(1,sl+1):
         for j in range(1,pl+1):
            if s[i] == p[j] or p[j] == '?':
               dp[i][j] = dp[i-1][j-1]
            elif p[j]=='*':
               dp[i][j] = max(dp[i-1][j],dp[i][j-1])
      return dp[sl][pl]
ob = Solution()
print(ob.isMatch("aa", "a?"))
print(ob.isMatch("aaaaaa", "a*"))

入力

"aa", "a."
"aaaaaa", "a*"

出力

True
True

  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. PythonでOpenCVを使用したテンプレートマッチング

    テンプレートマッチングは、パッチまたはテンプレートを実際の画像からマッチングできる手法です。これは基本的にパターンマッチングメカニズムです。 PythonにはOpenCVモジュールがあります。 openCVを使用すると、一致するものを簡単に見つけることができます。したがって、この問題では、OpenVCテンプレートマッチング手法が使用されます。 OpenCV機能を使用するには、 pipを使用してダウンロードする必要があります 。 sudo pip3 install opencv-python テンプレートマッチングタスクには、精度係数があります。この係数はしきい値と呼ばれます。一例とし