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

Pythonでの正規表現マッチング


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

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

  • スター「*」は、前の要素の0個以上に一致します。

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

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

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

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

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

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

    • dp [0、i]:=dp [0、i-2](p [i]がスターの場合、それ以外の場合はFalse

  • 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、j-2]

        • s[i]がp[j– 1]であるか、p [j – 1]がドットである場合、

          • dp [i、j]:=dp [i、j]とdp [i – 1、j]の最大値

  • dp [ss、ps]

    を返します

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

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

入力

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

出力

True
True

  1. Pythonで正規表現修飾子はどのように機能しますか?

    正規表現リテラルには、マッチングのさまざまな側面を制御するためのオプションの修飾子が含まれる場合があります。修飾子はオプションのフラグとして指定されます。排他的論理和(|)を使用して複数の修飾子を指定でき、これらのいずれかで表すことができます- 以下は、さまざまなre修飾子とその機能のリストです。 1. re.I 大文字と小文字を区別しないマッチングを実行します。 2. re.L 現在のロケールに従って単語を解釈します。この解釈は、アルファベットのグループ(\wと\W)、および単語の境界の動作(\bと\B)に影響します。 3 re.M $を(文字列の終わりだけでなく)行の

  2. Pythonの正規表現とは何ですか?

    簡単に言うと、正規表現は、主に文字列またはファイル内のパターンを検索して置換するために使用される文字のシーケンスです。これらは、python、perl、R、Javaなどのほとんどのプログラミング言語でサポートされています。 正規表現は、コード、ログファイル、スプレッドシート、さらにはドキュメントなどのテキストから情報を抽出する場合に非常に役立ちます。正規表現の実際の使用法について詳しく説明します。 正規表現を使用するときに最初に知っておくべきことは、すべてが基本的に文字であり、特定の文字シーケンス(文字列とも呼ばれる)に一致するパターンを作成することです。ほとんどのパターンは通常のASCI