正規表現


正規表現は


正規表現は、文字列からなるデータを処理するために使用されます.
アルゴリズムの問題から見ると,文字列を加工する問題によく遭遇する.ただし、文字列にはアルファベット、数値、アルファベット、特殊文字などが含まれているため、特定の文字列を抽出または削除しようとする場合、通常の文字列メソッドだけではこれらの問題を処理することは困難です.
Pythonだけでなく、他の言語でも使用可能であり、その使い方も多様であるため、正規表現を位置づけます.
まず、コードを簡単に見てみましょう.
import re

text = "as7df8s7g5sd"
a = re.compile("\d") # 1.
b = a.findall(text)  # 2.
print(b)
  • 正規表現は、モジュールreまたはregexのインポートで開始します.

  • compile(「正規表現」)

  • compileは、入力したモードを通常のオブジェクトに戻す方法です.

  • compileには複数のオプションが含まれています.たとえば、数値のみを抽出したり、最後の文字を「C」で終わるか、異なるモードを入力したりすることができます.

  • すなわち,aは我々が決定したパターンである.

  • モードメソッド
  • aには4つの検索方法があります.
  • パターンメソッドのタイプ


    「メソッド機能マッチング」(Pattern,string)Stringの開始からアレイをチェックします.最初の部分が間違っている場合は、Noneを返します.「サーチ」(Search,String)Stringのパターンを最初からチェックします.パターンが見つかるまでチェックします.findall(モード、string)Stringのすべての始終一致するモードを検索し、リストに戻ります.finditter(モード、string)Stringのすべての一致モードを見つけ、callbable iteratorに戻ります.
  • match
  • # 성공
    p = re.compile("ab")
    m = p.finditer("abbgaab")
    print(m)
    
    >> <re.Match object; span=(0, 2), match='ab'>
    
    # 실패
    p = re.compile("ab")
    m = p.finditer("babbgaab")
    print(m)
    
    >> None
    指定されたStringがパターンで開始されない場合は、すぐにNoneに戻ります.次に、アレイから、Match objectを返します.
    しかし、このMatchObjectをどう使うのか.
    情報抽出方法は、すぐに使用する必要があります.
    「情報抽出」関数を使用すると、上記のアレイメソッドを使用してリストを返すfindall()以外のメソッドが使用できます.
    
    p = re.compile("ab")
    m = p.match("abbgaab")
    print(m.group()) # 매칭된 문자열을 반환합니다.
    print(m.start()) # 매칭된 문자열의 시작 인덱스를 반환합니다.
    print(m.end())   # 매칭된 문자열의 종료 인덱스를 반환합니다.
    print(m.span())  # 시작과 종료 지점을 튜플로 반환합니다.
    >> ab
    >> 0
    >> 2
    >> (0, 2)
    
    # 
  • search
  • p = re.compile("ab")
    m = p.search("agababc")
    print(m.group())
    print(m.start())
    print(m.end())
    print(m.span())
    >> ab
    >> 2
    >> 4
    >> (2, 4)
    検索はmatchにも似ていますが、異なる点は必ずしもモードから始まるわけではありません.Stringを常に検索して、一致するモードを検索したり、インデックスを抽出したり、文字列を取得したりすることができます.
  • findall()
  • p = re.compile("\d")
    m = p.findall("a76dg78s6gs")
    print(m)
    >> ['7', '6', '7', '8', '6']
    dは、すべての数字を抽出する文字クラスです.文字列に入力されたパターンの数だけがリストに戻ります.
  • finditer()
  • p = re.compile("\d")
    m = p.finditer("a76dg78s6gs")
    
    for x in m:
        print(x.group())
        print(x.start())
        print(x.end())
        print(x.span())
    
    >> 7
    >> 1
    >> 2
    >> (1, 2)
    >> 6
    >> 2
    >> 3
    >> (2, 3)
    
    すべての数値を抽出すると、反復オブジェクトのm for文を使用できます.各要素はMatch objectであるため、match()などのgroup、startなどの方法で情報を抽出する必要があります.

    メタ文字の使用


    前の例では、数値のみを抽出するか、特定の文字列のみを抽出します.
    より詳細については、メタ文字を使用してより多くのオプションを追加できます(抽出範囲はex 0~5、a~bの文字列抽出など).
    代表的にいくつか紹介しましょう
    クラスの意味[][中の文字は数字dのみ、[0-9]と同じDは非数字のみ、[^0-9]と同じa*b*の前に文字を繰り返す文字列、babaabなどとマッチします.a.baとbの間に文字があればコーディネート、acb aobなどコーディネート.a+baとbの間に文字がある場合は、組み合わせて、必ず1つ以上のaが必要です.a{2,3}aは少なくとも2つの最大3つの繰返しを表し,a不整合aはaaa不整合である.w数字+文字の組み合わせ.

    print(re.findall(r"a.b", "babababb"))
    >> ['abb']
    
    print(re.findall(r"[ab]", "babababb"))
    >> ['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b']
    
    print(re.findall(r"ab", "babababb"))
    >> ['ab', 'ab', 'ab']
    
    print(re.findall(r"a*b", "abaaaababb"))
    >> ['ab', 'aaaab', 'ab', 'b']
    
    print(re.findall(r"a+b", "abaaaababb"))
    >> ['ab', 'aaaab', 'ab']
    
    print(re.findall(r"a|b", "babababb"))
    >> ['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b']
    
    print(re.findall(r"ab{2,5}a", "aabbaabbbbaabbbbbbba"))
    >> ['abba', 'abbbba']
    
    print(re.findall(r"\w", "asg098%98(&&E&"))
    >> ['a', 's', 'g', '0', '9', '8', '9', '8', 'E']