day 17正規表現
5368 ワード
正規表現
1.正規表現とは
正則は文字列マッチングを行うためのツールで、異なる記号で異なる文字をマッチングします.
2.python正規表現のサポート
reモジュールによる正規表現をサポートする方法
a.fullmatch(正規表現、文字列)->指定した文字列と正規表現でマッチングします.マッチングに成功してマッチングオブジェクトが返された場合、マッチングに失敗してNoneが返されます.pythonでは正規表現は文字列に書かれていますが、一般的には一番前にr/Rが加算されます.
0普通文字(文字自体を表す)
1つの文字列に一致し、3つの文字しかなく、各文字はそれぞれa,b,cである.
1 .(任意の文字に一致)
注意:a.一つ.1文字bを表す.一致しない
1つの文字列に一致し、3つの文字しかなく、1つ目の文字はaで、2つ目の文字は任意の文字で、最後の文字はcです.
2.w(アルファベットの下線に一致する中国語)
注意:a.中国語b.1つのwは1つの文字しか一致しません
1文字列に一致します.1文字目は任意の文字で、2文字目と3文字目はアルファベット、数字、または_です.最後の3つはabcです
3s(空白文字に一致)
空白文字:スペース、タブ、改行など、空白を生成できるすべての文字を指します.
最初の2文字はアルファベット、数字、下線、または中国語で、3番目の文字は空白で、最後の文字は任意の文字です.
4d(数字に一致)
1つの文字列に一致し、3つの文字があり、各文字は数値文字です.
5b(単語境界を検出)
a.正規表現中のbの位置が単語境界であるかどうかを検出するb.単語境界:2つの単語を区切ることができるすべての記号は単語境界であり、例えば:スペース、インデント、句読点など、単語の先頭、単語の末尾
注意:bは一致記号ではなく、文字は一致しません.ただ、位置が要求を満たしているかどうかを検出します.
6^(検出文字列先頭)
一致する文字列は3つの数値文字で、最初の文字の位置は文字の先頭です.
7$(検出文字列の末尾)
一致する文字列は3文字で、最後の文字の後ろに文字列の末尾があります.
8B(単語以外の境界を検出)
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文字で、最初の文字は数字1-9のいずれかで、最後の文字は任意の小文字で、中間の2文字は任意の数字です.
13[^文字セット]-文字セットにない他の任意の文字に一致
注意:[]の一番前に置くと、文字セットに一致しない他の任意の文字が表示されます.[]の一番前に置かないと文字^そのものを表します
1つの文字列に一致します.最初の文字はabcの他の文字でなければいいです.後ろは123です.
14エスケープ記号
正則では特殊記号の前に「」を付けることで記号をエスケープすることもできます
-文字.-.文字^-^文字
b.中括弧に特殊な意味を持つ記号に加えて、他の記号を[]に置くことも記号そのものを表す-:中括弧の中の2つの文字の間に誰から誰を表すか;それ自体を表すには2文字の間に置かないでください^:中括弧の一番前に特別な意味があります;それ自体を表すには、[]:中括弧で[]を表すには、
注意:エスケープ文字は文字列の概念エスケープ記号であり、正規表現の概念です.
二、マッチング回数
import re
#1*(0回以上一致)
文字*-指定された文字は0回以上表示されます(ここでは正規文字でも通常文字でも構いません).
a*-a出現0回または複数回d*-任意の数字出現0回または複数回[a-z]*-任意の小文字出現0回または複数回123の前に0文字または複数の文字があり、各文字はaである
123の前には0文字以上あり、各文字は数字である
2+(1回または複数回一致)
3 ?(マッチング0回または1回)
練習:すべての整数文字列に一致する正規表現を書く
4 {}
{M,N}−マッチングM~N回(最小M回,最大N回){M,}−マッチング少なくともM回{,N}−マッチング最大N回{N}−マッチングN回
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'))