NLP_Python 3——正規表現


以前、正規表現を専門に説明するブログを転載したことがあります(https://blog.csdn.net/u013032852/article/details/81506431)は、正規表現の構成を詳しく説明しています.少なくとも入門すれば十分だと思います.やはり自分の活学の活用と日常の积み重ね(どうせ私は日常的に使うのが比较的に少なくて、结局私の仕事の内容はいつも交换して・・・普通はすべて使う时に来てみます正則は多くのことを省くことができる~~ここではpython 3でどのように正則表現を使うかを簡単に説明します.
Pythonではreモジュールを用いて正規表現を用いているが,一般的には以下のような手順が用いられる.
  • 必要に応じて正規表現
  • を組み立てる.
  • フォーム時の文字列をPatternインスタンス
  • に割り当てる
  • は、Patternインスタンスを使用してテキストを処理し、一致するコンテンツ
  • を取得する.
  • 一致するコンテンツから所望の情報を取得する、後続の他の操作
  • を行う.
    import re
    #         r          '\'     , r'\d'   '\\d'
    pattern = re.compile(r'[\d\w]*')    #       (       )  Pattern  
    match = pattern.match('ak,i.uop3umok2345234sdfj')    #  Pattern            
    if match:
        print(match.groups())
    
    **************
        :ak

    re.compile(pattern,flags=0):関数はPatternクラスのファクトリメソッド(ファクトリメソッドとは何かを知らない人は自分で設計モードを検索することができ、もちろんこの関数の使い方を学ぶのに影響がないかどうかを知っている)であり、文字列形式の正規表達式をPatternオブジェクトにコンパイルするために使用される.flagsパラメータはマッチングモードを指定するために使用する、複数のマッチングモードは、reなどのビットまたは演算子"|"で接続することができる.I|re.M,flagsの列挙値は以下の通りである.
    A = ASCII = sre_compile.SRE_FLAG_ASCII # assume ascii "locale",       \w\W\b\B\s\S   ascii       
    I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case,     
    L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale,       \w\W\b\B\s\S       
    U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode "locale",       \w\W\b\B\s\S   unicode       
    M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline,    ,  '^' '$'   
    S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline,  '.'   
    X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments,               、      、      

    pattern.match(str) or re.match(pattern,str,flags):strに一致する文字列が文字列の開始位置から一致するかどうか、strに一致する文字列があるかどうか、開始位置が一致しなければNoneを返し、re.matchのpatternパラメータは直接正規表現文字列にすることができ、正規表現文字列を直接使用する場合は、エスケープ(r)を忘れないように注意してください.このメソッドを使用すると、matchインスタンスが返されます.このインスタンスには、次のプロパティとメソッドがあります.
    string:マッチングオブジェクト、すなわち原文
    re:マッチング時に使用するPattern
    pos:テキスト内の正規表現が検索を開始する開始インデックス
    endpos:テキスト内の正規表現が検索を終了するインデックス
    Lastindex:最後にキャプチャされたgroupの文のインデックスです.キャプチャに失敗した場合はNoneを返します.
    Lastgroup:最後に取得されたグループの別名.取得に失敗した場合、またはこのグループに別名がない場合はNoneを返します.
    group([0,1,2``]):1つ以上のgroupをキャプチャし、パラメータは別名であっても番号であってもよく、番号0または非参照はすべての一致するgroupを表す.複数のパラメータを指定すると、メタグループの結果が返されます.
    groups([args]):取得したすべてのパケットをメタグループ形式で返し、group(1,2``n)を呼び出すことに相当する.argsはgroupがキャプチャされていない場合にargsを返し、デフォルトはNone
    groupdict([agrs]):別名をkey、groupを値とする辞書を返します.別名のないgroupは存在しません.argsはgroupを取得していない場合にargsを返します.デフォルトはNoneです.
    start([group]):指定したgroupの原文の開始インデックス(groupの最初の文字のインデックス)を返し、groupのデフォルト値は0です.
    end([group]):指定したgroupの原文での終了インデックス(group最後の文字のインデックス+1)を返し、groupのデフォルト値は0です.
    span([group]):戻り(start(group),end(group))
    expand(template):一致するパケットをtemplateに代入して戻ります.templateではidまたはg、g参照パケットを使用できますが、番号0は使用できません.idとgは等価です.しかし、10は10番目のグループとみなされ、1の後に文字'0'を表現したい場合は、g<1>0しか使用できません.
    import re
    
    m = re.match(r'(\w*)[, ;](\w*)', 'asdf,fda3e opwerl;o9weoir')
    
    print('m.string', m.string)
    print('m.re', m.re)
    print('m.pos', m.pos)
    print('m.endpos', m.endpos)
    print('m.lastindex', m.lastindex)
    print('m.lastgroup', m.lastgroup)
    print('m.group(1,2)', m.group(1, 2))
    print('m.groups()', m.groups())
    print('m.start(2)', m.start(2))
    print('m.end(2)', m.end(2))
    print('m.span(2)', m.span(2))
    print("m.expand(r'\2 \1')", m.expand(r'\2 \1'))
    
    ************************************************
        :
    m.string asdf,fda3e opwerl;o9weoir
    m.re re.compile('(\\w*)[, ;](\\w*)')
    m.pos 0
    m.endpos 25
    m.lastindex 2
    m.lastgroup None
    m.group(1,2) ('asdf', 'fda3e')
    m.groups() ('asdf', 'fda3e')
    m.start(2) 5
    m.end(2) 10
    m.span(2) (5, 10)
    m.expand(r'\2 \1') fda3e asdf

    pattern.search(str,pos,endpos) or re.search(pattern,string,flags):原文のpos下付き文字からendpos下付き文字までgroupをマッチングしようとします.posパラメータとendposパラメータはデフォルトで原文の開始位置と終了位置です.matchとの違いは、searchは文からマッチングできるが、matchは開始位置からのみマッチングできることである.
    pattern.split(string,maxsplit) or re.split(pattern,string,maxsplit):一致するgroupを区切り記号として原文を分割してリストで返し、maxsplitは最大分割回数を指定し、デフォルトはすべて分割
    import re
    
    pattern = re.compile(r'\W+')
    strs = pattern.split('aki.uop3umok2,345234s/dfj')    #  Pattern            
    print(strs)
    
    ****************************
        :
    ['aki', 'uop3umok2', '345234s', 'dfj']

    pattern.findall(string,pos,endpos) or re.findall(pattern,string,flags):原文からマッチングを検索し、マッチング可能なすべてのグループをリスト形式で返す
    import re
    
    pattern = re.compile(r'\w+')
    strs = pattern.findall('aki.uop3umok2,345234s/dfj')
    print(strs)
    
    *****************************
        :
    ['aki', 'uop3umok2', '345234s', 'dfj']

    pattern.sub(repl,string,count=0)or sub(pattern,repl,string,count=0,flags=0):stringで一致するgroupをreplで置換し、置換後の文字列を返します.replは文字列であってもよいし、方法であってもよい.replが文字列である場合、パケットはidまたはg、gで参照できますが、番号0は使用できません.replがメソッドである場合、このメソッドは1つのパラメータ(matchオブジェクト)のみを受け入れ、置換のために文字列を返すべきである.countは、最大置換回数を指定します.デフォルトはすべて置換です.
    import re
    
    def sub_match(m):
        return m.group(1) + ":" + m.group(2)
    pattern = re.compile(r'(\d+).(\d+)')
    strs = pattern.sub('NUM', 'aki.uop3umok2,345234s/dfj')
    print(strs)
    strs = pattern.sub(r'\1:\2', 'aki.uop3umok2,345234s/dfj')
    print(strs)
    strs = pattern.sub(sub_match, 'aki.uop3umok2,345234s/dfj')
    print(strs)
    
    ********************************
         :
    aki.uop3umokNUMs/dfj
    aki.uop3umok2:345234s/dfj
    aki.uop3umok2:345234s/dfj