[python]Pythonreモジュール


Pythonreモジュール


正規表現を使用した文字列の検索


re.compile()-保存モード

import re

pat1 = re.compile('[a-z]+') # 한단어 이상의 영어
pat2 = re.compile("\d{3}") # 세자리로 이루어진 숫자
オプション
  • re.DOTALL-先頭文字を含むすべての文字に一致します
  • re.I-大文字と小文字の一致を許可
  • re.MULTILINE-はマルチラインと組み合わせることができる
  • コンパイルモードでオブジェクトを検索する方法

  • match()-文字列が最初から正規表現と一致しているかどうかを確認します.(すべて所有する必要があります)
  • search()-文字列全体を検索し、正規表現と一致するかどうかを調べます.(部分一致)
  • findall()-正規表現に一致するすべての文字列を返します.(通常のフォーマットに一致するリストを返します)
  • finditter()-正規表現に一致するすべての文字列を返します.(正規表現に一致する重複可能なオブジェクトを返します)
  • match,searchは正規表現と一致するとmatchオブジェクトを返し,一致しないとNoneを返す.

    match, search

    import re
    
    p = re.compile('[a-z]+')
    m = p.match("python hello world 12word deram!!!")
    print(m)
    m = p.match("123 4214123 1421341234!!!!")
    print(m)
    
    pat = re.compile("\d{3}")
    res = pat.search("drea dee 12 123")
    print(res)
    
    '''
    출력값
    <re.Match object; span=(0, 6), match='python'>
    None
    <re.Match object; span=(12, 15), match='123'>
    '''

    findall, finditer

    import re
    
    p = re.compile('[a-z]+')
    m = p.findall("python hello world 12word deram!!!")
    print(m)
    m = p.findall("123 4214123 1421341234!!!!")
    print(m)
    
    pat = re.compile("\d{3}")
    res = pat.findall("drea dee 12 123")
    print(res)
    
    '''
    출력값
    ['python', 'hello', 'world', 'word', 'deram']
    []
    ['123']
    '''
    
    import re
    
    p = re.compile('[a-z]+')
    f = p.finditer("python hello world 12word deram!!!")
    
    # print(dir(re.Match)) # Match 클래스의 메소드들
    for find in f:
        print(find, end=' ')
        print(find.span()) # 범위값을 알 수 있다
    
    '''
    출력값
    <re.Match object; span=(0, 6), match='python'> (0, 6)
    <re.Match object; span=(7, 12), match='hello'> (7, 12)
    <re.Match object; span=(13, 18), match='world'> (13, 18)
    <re.Match object; span=(21, 25), match='word'> (21, 25)
    <re.Match object; span=(26, 31), match='deram'> (26, 31)
    '''
    

    文字列メタ文字

  • | - or
  • ^-文字列の先頭に一致
  • $-一致文字列末尾
  • grouping

  • 正規表現で()+で表す
  • matchオブジェクトのgroupメソッドを使用すると、描画された部分の文字列のみが抽出されます.
  • p = re.compile(r'(\w+)\s+(\d+[-]+\d+[-]\d+)')
    res = p.search("leehyundong 010-1234-4321")
    print(res.group(1))
    print(res.group(2))
    
    '''
    출력값
    leehyundong
    010-1234-4321
    
    '''

    正規表現の使用(Eメール)

    p = re.compile(r"[a-zA-Z0-9_-]+@[a-z]+.[a-zA-Z]+$")
    s1 = "[email protected]"
    s2 = "[email protected]"
    s3 = "[email protected]"
    
    res = p.match(s1)
    print(res)
    res = p.match(s2)
    print(res)
    res = p.match(s3)
    print(res)
    
    '''
    <re.Match object; span=(0, 19), match='[email protected]'>
    None
    None
    '''

    文字列置換

    s = "korean american italian"
    res = re.sub('n', '', s)
    print(res)
    
    '''
    korea america italia
    '''