day 17正規表現

5368 ワード

正規表現
1.正規表現とは
正則は文字列マッチングを行うためのツールで、異なる記号で異なる文字をマッチングします.
2.python正規表現のサポート
reモジュールによる正規表現をサポートする方法
a.fullmatch(正規表現、文字列)->指定した文字列と正規表現でマッチングします.マッチングに成功してマッチングオブジェクトが返された場合、マッチングに失敗してNoneが返されます.pythonでは正規表現は文字列に書かれていますが、一般的には一番前にr/Rが加算されます.
0普通文字(文字自体を表す)
1つの文字列に一致し、3つの文字しかなく、各文字はそれぞれa,b,cである.
    re_str = r'abc'
    result = fullmatch(re_str, 'abc')
    print(result)

1 .(任意の文字に一致)
注意:a.一つ.1文字bを表す.一致しない
1つの文字列に一致し、3つの文字しかなく、1つ目の文字はaで、2つ目の文字は任意の文字で、最後の文字はcです.
    re_str = r'a.c'
    result = fullmatch(re_str, 'a&c')
    print(result)

2.w(アルファベットの下線に一致する中国語)
注意:a.中国語b.1つのwは1つの文字しか一致しません
1文字列に一致します.1文字目は任意の文字で、2文字目と3文字目はアルファベット、数字、または_です.最後の3つはabcです
    re_str = r'.\w\wabc'
    result = fullmatch(re_str, 'o habc')
    print(result)

3s(空白文字に一致)
空白文字:スペース、タブ、改行など、空白を生成できるすべての文字を指します.
最初の2文字はアルファベット、数字、下線、または中国語で、3番目の文字は空白で、最後の文字は任意の文字です.
    re_str = r'\w\w\s.'
    result = fullmatch(re_str, 'a2
)') print(result)

4d(数字に一致)
1つの文字列に一致し、3つの文字があり、各文字は数値文字です.
    re_str = r'\d\d\d'
    result = fullmatch(re_str, '380')
    print(result)

5b(単語境界を検出)
a.正規表現中のbの位置が単語境界であるかどうかを検出するb.単語境界:2つの単語を区切ることができるすべての記号は単語境界であり、例えば:スペース、インデント、句読点など、単語の先頭、単語の末尾
注意:bは一致記号ではなく、文字は一致しません.ただ、位置が要求を満たしているかどうかを検出します.
    #            'how are',      'a'        
    re_str = r'how \bare'
    result = fullmatch(re_str, 'how are')
    print(result)

6^(検出文字列先頭)
一致する文字列は3つの数値文字で、最初の文字の位置は文字の先頭です.
    re_str = r'^\d\d\d'
    result = search(re_str, 'asdfassf212dss')
    print(result)

7$(検出文字列の末尾)
一致する文字列は3文字で、最後の文字の後ろに文字列の末尾があります.
    re_str = r'\d\d\d$'
    result = search(re_str, 'asdfassf212')
    print(result)

8B(単語以外の境界を検出)
    re_str = r'abc\B123'
    result = fullmatch(re_str, 'abc123')
    print(result)

9W(非数値、アルファベット、アンダースコア、中国語に一致)
10S(空白以外の文字に一致)
11D(数字以外の文字に一致)
12文字セット
注:1つの[]は1文字を表します
a.一般的な使い方
[文字セット]-文字セットの任意の文字に一致します.
b.表示範囲
[文字1-文字2]-文字1~2のすべての文字に一致します.文字1の符号化値が文字2の符号化値[1-9]-数字1-9[a-z]-小文字[A-Z]-大文字[a-zA-Z]-すべての文字[a-zA-Zd_]-数字の下線
    #         4   ,      'a'  'b'  'c',   123
    re_str = r'[abc]123'
    result = fullmatch(re_str, 'a123')
    print(result)

一致する文字列は4文字で、最初の文字は数字1-9のいずれかで、最後の文字は任意の小文字で、中間の2文字は任意の数字です.
    re_str = r'[1-9]\d\d[a-z]'
    result = fullmatch(re_str, '812d')
    print(result)

    re_str = r'[a-zA-Z\d_]'
    result = fullmatch(re_str, 'a')
    print(result)

13[^文字セット]-文字セットにない他の任意の文字に一致
注意:[]の一番前に置くと、文字セットに一致しない他の任意の文字が表示されます.[]の一番前に置かないと文字^そのものを表します
1つの文字列に一致します.最初の文字はabcの他の文字でなければいいです.後ろは123です.
    re_str = r'[^abc]123'
    result = fullmatch(re_str, ')123')
    print(result)
    #          1-9           
    re_str = r'[^1-9]123'
    result = fullmatch(re_str, ')123')
    print(result)

    #       1-9       ^
    re_str = r'[1-9^]123'
    result = fullmatch(re_str, '^123')
    print(result)

14エスケープ記号
正則では特殊記号の前に「」を付けることで記号をエスケープすることもできます
-文字.-.文字^-^文字
b.中括弧に特殊な意味を持つ記号に加えて、他の記号を[]に置くことも記号そのものを表す-:中括弧の中の2つの文字の間に誰から誰を表すか;それ自体を表すには2文字の間に置かないでください^:中括弧の一番前に特別な意味があります;それ自体を表すには、[]:中括弧で[]を表すには、
注意:エスケープ文字は文字列の概念エスケープ記号であり、正規表現の概念です.
    re_str = r'\d\d\.\d\d'
    print(fullmatch(re_str, '23.45'))

    print(fullmatch(r'[-19.*^]', 'k'))

二、マッチング回数
import re
#1*(0回以上一致)
文字*-指定された文字は0回以上表示されます(ここでは正規文字でも通常文字でも構いません).
a*-a出現0回または複数回d*-任意の数字出現0回または複数回[a-z]*-任意の小文字出現0回または複数回123の前に0文字または複数の文字があり、各文字はaである
    re_str = r'a*123'
    print(re.fullmatch(re_str, 'aaa123'))
    print(re.fullmatch(re_str, '123'))

123の前には0文字以上あり、各文字は数字である
    re_str = r'\d*123'
    print(re.fullmatch(re_str, 'aaa123'))
    print(re.fullmatch(re_str, '123'))

    re_str = r'[a-z]*123'
    print(re.fullmatch(re_str, 'aaa123'))
    print(re.fullmatch(re_str, '123'))

2+(1回または複数回一致)
    re_str = r'a+123'
    print(re.fullmatch(re_str, 'aaa123'))
    print(re.fullmatch(re_str, 'a123'))

3 ?(マッチング0回または1回)
    re_str = r'\+?abc'
    print(re.fullmatch(re_str, 'abc'))

練習:すべての整数文字列に一致する正規表現を書く
1233
+233
-384
00233       
    re_str = r'[+-]?[1-9]\d*'
    print(re.fullmatch(re_str, '-384'))

4 {}
{M,N}−マッチングM~N回(最小M回,最大N回){M,}−マッチング少なくともM回{,N}−マッチング最大N回{N}−マッチングN回
    print(re.fullmatch(r'a{2,5}', 'aa'))

    #   :6 16 ,         
    print(re.fullmatch(r'[a-zA-Z\d]{6,16}', '3u2222'))