day 18まとめ-正規表現

3386 ワード

正規表現
1.正規表現とは
正規表現は文字列マッチングツールであり、必要に応じて文字列をより迅速に処理できるようにします.
2.正規表現の使用方法
pythonはreモジュールを提供することで正規表現をサポートする
import re
re.fullmatch(正規表現、文字列)--正規表現と文字列を完全に一致させ、一致が失敗した場合はNoneを返します.文字列は、符号化文字u 4 e 00、エスケープ文字などをサポートします.
3.正規表現の書き方
pythonの正規表現は文字列に配置され、この文字列は一般的に一番前にr/Rを加算します.
4.正規文法
1)普通文字
普通の文字は文字そのものを表す
  • .

  • 任意の文字に一致し、'.'1文字を表す
  • \w

  • ASCIIテーブルコードのアルファベット、数字、または下線を一致させ、Unicodeテーブルの国文字文字も一致させることができます.
  • \s

  • スペース、リターン、タブを含む空白文字を一致させます.
  • \d

  • 数字の一致
  • \b

  • 単語境界の検出:検出bが存在する位置が単語境界であるか否か
    単語境界:1つの単語の終わりを示す記号はすべて単語境界です.たとえば、スペース、リターン、句読点など、文字列の先頭と終了も単語境界です.
  • ^

  • 文字列で始まるかどうかを検出
  • $

  • 文字列で終わるかどうかを検出
  • 大文字
  • 小文字機能の否定
    W--数字以外の下線を照合
    S--空白以外の文字に一致
    D--数字以外の文字に一致
    B--非単語境界を検出
  • [ ]

  • [文字セット]:[]の任意の文字に一致
    [文字1-文字2]:一致符号化値が文字1から文字2の符号化までの任意の文字(ord(文字1)[文字セット、文字範囲]:中括弧内の内容の否定を表し、「中括弧の内容の一番前に置くと否定の意味を表し、他の位置では普通の文字'^'のみを表す.
    11)エスケープ記号
    特殊意味文字が中括弧の外にある場合:正則に特殊な意味や特殊な機能を持つ記号を、記号そのもの(特殊な意味や機能を消す)を表し、特殊な意味や機能の記号の前に''を付ける.
    特殊な意味を持つ文字は、[+],[*],[-],[^]といった特殊な意味をカッコ内に入れて削除することもできます.
    より多くの場合、両者を組み合わせて使用します:[^\d 1-9[]]
    文字の順序を変更することで簡単にできます:[\d 19^[]-]


  • 0回以上マッチ
    [abc]* = [abc][abc][abc]... (0-n中かっこの中身)
    \d* =\d\d\d\d...


  • 1回以上マッチ
  • { }

  • {N}:N回マッチ
    {M,N}:MからN回マッチング
    {M,}:少なくともM回マッチング
    {,N}:最大N回マッチ
    注意:以上のマッチングは貪欲なマッチングで、マッチング回数が不確定な場合は、できるだけ多くマッチングします.
    欲張りではありません:マッチング回数が不確定なときに後ろに'?',できるだけ少ないマッチング、例えば:+?、{M,}?
    15)分岐/選択
    正規表現1|正規表現2|正規表現3|
    正規表現1または2または3...に一致する.式1を順番に一致させ、再一致式2を満たさないため、順番が重要です
    a = 're 89he ks90.2 ans78oo1.23h!w9end9009ooo'
    re_str1 = r'\d+\.*\d+|\d+'
    re_str2 = r'\d+|\d+\.*\d+'
    #           
    

    16)グループ化
    (式){N}:括弧内の内容を全体としてN回繰り返す
    (式1|式2|式3|...):式1または2または3に一致...
    数値:対応するパケットがその前に存在することを前提として、いくつかのパケット照合結果を繰り返します.
  • ?

  • ?欲張りでないことを表すだけでなく、0回または1回繰り返すことを表すこともできます.
    ??0回繰り返す
    5.正規相関方法
    import re
    1)完全一致
    re.fullmatch(正規表現、文字列)
    result = re.fullmatch(r'(\d{3})=([a-z]{3})' '234=asd')
    print(result)
    
    #1.               
    print(result.span())  #             
    print(result.span(1))  #                
    print(result.start(2),result.end(2))
    #2.       
    print(result.group())   #            
    print(result.group(1))
    print(result.group(2))
    #3.      
    print(result.string)
    

    2)一致文字列の先頭
    re.match(正規表現、文字列)--文字列の先頭が正規表現と一致するかどうかを判断し、一致に成功して一致オブジェクトを返し、一致に失敗してNoneを返します.
    result = re.match(r'\d{3}','123sdf')
    print(result,result.span(),result.group())
    

    3)search
    re.search(正規表現、文字列)--正規表現と一致するサブ列が文字列にあるかどうかを検索し、Noneが返されていない場合は、ある場合は最初の一致結果を返します.
    4)findall
    re.findall(正規表現、文字列)--正規表現を満たす文字列のすべてのサブ列を取得し、空のリストを返さずにリストとして返します.
    注:正規表現にグループ化されていない場合、正規表現全体が一致する結果はリスト要素(文字列)として使用されます.パケットがある場合、このパケットが一致した結果はリスト要素(文字列)として使用されます.複数のグループがある場合は、元祖をリスト要素とし、各グループが一致した結果を元祖要素とします.
    5)finditer
    re.finditter(正規表現、文字列)--正規表現と一致する文字列内のすべてのサブ列の一致結果を取得します.反復器を返します.反復器の要素は一致結果です.