2018-10-23 Day18
9578 ワード
01-正規表現構文
正規表現は、文字列を一致または記述するツールです.用途:a.文字列がある条件を満たしているか否かを判断する---入力した文字列がメールボックス/携帯電話番号であるか否かを判断する.IPアドレスbであるかどうかb.条件を満たす文字列c.文字列置換を抽出する
pythonでは、reモジュール内の対応する方法で正規表現のマッチング、検索、置換などの機能をサポートしますfrom re import fullmatch fullmatch(正規表現文字列、文字列)--->正規表現と文字列が正規表現文字列に完全に一致しているかどうかを判断します.文字列であり、文字列では正規表現構文です.r'正規表現'正規表現には2つの部分が含まれています.1つは正規文法に対応する文字で、2つは普通の文字です.
1 .(任意の文字に一致)
ひとつ1文字のみ一致
2w(アルファベットアンダースコアに一致)
1文字に一致するw
3s(任意の空白文字に一致)
空白文字:スペース、タブ(t)、折り返し(改行)など、空白文字を入力します.
4d(数字に一致)
5b(検出境界)
1つのbは1つの文字に一致しないで、単純にbが現れる位置が単語境界の単語境界であるかどうかを検出します:文字列の開始と終了、スペース、改行、句読点など、2つの単語を隔てた文字を単語境界にすることができます
6^(文字列の先頭かどうかを検出)
7$(文字列の末尾であるかどうかを検出)
8W(非アルファベット、アンダースコアの一致)
9S(空白以外の文字に一致)
10D(数字以外の文字に一致)
11B(単語境界でないか検出)
12
1つの[]は、文字セットに一致する[文字セット]-->は、文字セットの任意の文字です.たとえば、[abc],[d+]
[文字1-文字2]-->Unicode符号化値が文字1から文字2のいずれかである文字を一致させる.文字1の符号化値が文字2より小さいことが要求されます.たとえば、[1-9]-->数字1から9[a-z]-->小文字[A-Z]-->大文字[>数字1から9[u 4 E 00-u 9 fa 5]-->すべての漢字に一致する
注意:-中括弧で、2文字の間に範囲を表す場合.
13^文字セット
注意:^は中括弧の一番前に置かなければ有効ではありません
02-正規表現回数相関記号
1.*(一致は0回または複数回)
文字*-->文字が0回または複数回一致する0ビットまたは複数の数値文字列
2.+(1回または複数回一致)
3. ?(マッチング0回または1回)
4.{}(指定回数)
{N}-->N回{M,N}-->MからN回{M,}-->少なくともM回{,N}-->最大N回
03-グループ化
1.|(分)
条件1|条件2-->まず条件1でマッチングし、マッチングが成功すればマッチングに成功します.条件1の一致に失敗した場合は、条件2で一致します.注意:条件1が一致した場合、条件2では一致しません.
2.()(グループ)
a.コンビネーション(かっこ内の内容を一体として扱う)b.キャプチャ--かっこ付き正規表現を使用してマッチングに成功した後、カッコ内の内容c.反復のみを取得--正規表現では、前の()で一致した結果を数で繰り返すことができます.数値は、最初のグループを表します.
a.組合せ
b.捕獲
c.繰り返し
3.エスケープ記号
正規表現では、特殊な記号の前にを付けることで、特殊な記号に意味を持たせることができます.-->任意の文字.-->文字-->1回または複数の+-->文字+ 注意:中括弧に特殊な機能を持つ記号は、記号そのもののみを表します.
04-reモジュールの関数
1. compile
compile(正規表現文字列)-->正規表現文字列を正規表現オブジェクトに変換
2.fullmatchとmatch
fullmatch(正規表現文字列、文字列)-->正規表現で文字列を完全に一致させ(文字列全体を一致させる)、一致オブジェクト(SRE_Match)またはNoneを返します.
match(正規表現文字列、文字列)-->文字列の先頭に一致し、一致するオブジェクトまたはNoneを返します.
3.search
search(正規表現、文字列)-->正規表現を満たす文字列の最初の文字列を検索します.戻り値は、一致するオブジェクトまたはNoneです.
4.findall
findall(正規表現、文字列)-->正規表現を満たす文字列のすべてのサブ列を取得し、式にパケットがある場合、値を取るときにパケットに一致する結果のみを取るリスト注意を返します.複数のグループがある場合、各グループが一致する結果は、元の要素として使用されます.
5.finditer
finditter(正規表現、文字列)-->正規条件を満たすすべてのサブ列を検索します.戻り値は反復器、反復器の要素は一致オブジェクトです.
6. split
split(正規表現、文字列)-->正規表現の条件を満たすサブ列で文字列を分割
7.sub
sub(正規表現、repl、文字列)-->正規表現条件を満たす文字列のサブ列をreplに置き換えます.置換後の文字列を返します
正規表現は、文字列を一致または記述するツールです.用途:a.文字列がある条件を満たしているか否かを判断する---入力した文字列がメールボックス/携帯電話番号であるか否かを判断する.IPアドレスbであるかどうかb.条件を満たす文字列c.文字列置換を抽出する
pythonでは、reモジュール内の対応する方法で正規表現のマッチング、検索、置換などの機能をサポートしますfrom re import fullmatch fullmatch(正規表現文字列、文字列)--->正規表現と文字列が正規表現文字列に完全に一致しているかどうかを判断します.文字列であり、文字列では正規表現構文です.r'正規表現'正規表現には2つの部分が含まれています.1つは正規文法に対応する文字で、2つは普通の文字です.
1 .(任意の文字に一致)
ひとつ1文字のみ一致
# 3 , 'a', , b
re_str = r'a.b'
result = fullmatch(re_str, 'a|b')
print(result)
# 4, a b,
re_str = r'a..b'
result = fullmatch(re_str, r'a
b')
print(result)
2w(アルファベットアンダースコアに一致)
1文字に一致するw
# ,
re_str = r'\w...'
result = fullmatch(re_str, 'o8js')
print(result)
3s(任意の空白文字に一致)
空白文字:スペース、タブ(t)、折り返し(改行)など、空白文字を入力します.
# a, , b
re_str = r'a\sb'
result = fullmatch(re_str, 'a
b')
print(result)
4d(数字に一致)
re_str = r'\d\d\d'
result = fullmatch(re_str, '282')
print(result)
5b(検出境界)
1つのbは1つの文字に一致しないで、単純にbが現れる位置が単語境界の単語境界であるかどうかを検出します:文字列の開始と終了、スペース、改行、句読点など、2つの単語を隔てた文字を単語境界にすることができます
re_str = r'\babc'
re_str = r'abc\b\saaa' # abc, , aaa。 c
result = fullmatch(re_str, 'abc aaa')
print(result)
6^(文字列の先頭かどうかを検出)
re_str = r'^\d\d\d' #
result = fullmatch(re_str, '123')
print(result)
7$(文字列の末尾であるかどうかを検出)
re_str = r'abc$'
result = fullmatch(re_str, 'abc')
print(result)
8W(非アルファベット、アンダースコアの一致)
re_str = r'\Wabc'
result = fullmatch(re_str, '#abc')
print(result)
9S(空白以外の文字に一致)
re_str = r'\S...'
result = fullmatch(re_str, '2jkh')
print(result)
10D(数字以外の文字に一致)
re_str = r'\D\w\w\w'
result = fullmatch(re_str, '#h7_')
print(result)
11B(単語境界でないか検出)
re_str = r'and\BYou'
result = fullmatch(re_str, 'andYou')
print(result)
12
1つの[]は、文字セットに一致する[文字セット]-->は、文字セットの任意の文字です.たとえば、[abc],[d+]
[文字1-文字2]-->Unicode符号化値が文字1から文字2のいずれかである文字を一致させる.文字1の符号化値が文字2より小さいことが要求されます.たとえば、[1-9]-->数字1から9[a-z]-->小文字[A-Z]-->大文字[>数字1から9[u 4 E 00-u 9 fa 5]-->すべての漢字に一致する
注意:-中括弧で、2文字の間に範囲を表す場合.
""" a b c, a"""
re_str = r'[abc]aaa'
result = fullmatch(re_str, 'caaa')
print(result)
re_str = r'[1-4]\d\d\d'
result = fullmatch(re_str, '1989')
print(result)
re_str = r'[\u0031-\u0039][a-z]'
result = fullmatch(re_str, '1h')
print(result)
re_str = r'[\u4E00-\u9fa5][\u4E00-\u9fa5][\u4E00-\u9fa5]'
result = fullmatch(re_str, ' ')
print(result)
re_str = r'[91-]'
result = fullmatch(re_str, '-')
print(result)
# ,
re_str = r'[\w\s]'
result = fullmatch(re_str, 'u')
print(result)
13^文字セット
注意:^は中括弧の一番前に置かなければ有効ではありません
""" , abc , """
re_str = r'[^abc]...'
re_str = r'[^1-9]...'
result = fullmatch(re_str, '898i')
print(result)
02-正規表現回数相関記号
1.*(一致は0回または複数回)
文字*-->文字が0回または複数回一致する0ビットまたは複数の数値文字列
re_str = r'\d*'
print(fullmatch(re_str, '123'))
# : , ( 1 )
re_str = r'[a-zA-Z_]\w*'
print(fullmatch(re_str, 'A'))
2.+(1回または複数回一致)
# abc
re_str = r'\d+abc'
print(fullmatch(re_str, '9abc'))
3. ?(マッチング0回または1回)
re_str = r'a?123'
print(fullmatch(re_str, 'a123'))
# : , (123, -2334, +9... ,012, -023,+0122 )
re_str = r'[-+]?[1-9]\d*'
print(fullmatch(re_str, '1234'))
4.{}(指定回数)
{N}-->N回{M,N}-->MからN回{M,}-->少なくともM回{,N}-->最大N回
re_str = r'\d{3}'
print(fullmatch(re_str, '123'))
re_str = r'\d{3,}'
print(fullmatch(re_str, '1234'))
re_str = r'\d{,3}'
print(fullmatch(re_str, '23'))
re_str = r'[a-z]{2,5}'
print(fullmatch(re_str, 'aajk'))
# : , 6-16
re_str = r'[\da-zA-Z]{6,16}'
03-グループ化
1.|(分)
条件1|条件2-->まず条件1でマッチングし、マッチングが成功すればマッチングに成功します.条件1の一致に失敗した場合は、条件2で一致します.注意:条件1が一致した場合、条件2では一致しません.
re_str = r'[a-z]{3}|[A-Z]{3}'
print(re.fullmatch(re_str, 'AHD'))
# abc,d aaa
re_str = r'abc|d|aaa'
print(re.fullmatch(re_str, 'aaa'))
# 'abc'+W/H/Y
re_str = r'abc(W|H|Y)'
print(re.fullmatch(re_str, 'abcY'))
2.()(グループ)
a.コンビネーション(かっこ内の内容を一体として扱う)b.キャプチャ--かっこ付き正規表現を使用してマッチングに成功した後、カッコ内の内容c.反復のみを取得--正規表現では、前の()で一致した結果を数で繰り返すことができます.数値は、最初のグループを表します.
a.組合せ
# , 3
re_str = r'(\d[a-zA-Z]){3}'
print(re.fullmatch(re_str, '2h8h7j'))
b.捕獲
re_str = r'(\d{3})abc'
print(re.fullmatch(re_str, '773abc'))
print(re.findall(re_str, 'euhasdhf873abcssjsja235abcu-03s834432abcjjsks'))
c.繰り返し
re_str = r'([a-z]{3})-(\d{2})\2'
print(re.fullmatch(re_str, 'hsn-2323'))
3.エスケープ記号
正規表現では、特殊な記号の前にを付けることで、特殊な記号に意味を持たせることができます.-->任意の文字.-->文字
re_str = r'\d{2}\.\d{2}'
print(re.fullmatch(re_str, '12=34'))
re_str = r'\d\+\d'
print(re.fullmatch(re_str, '3+7'))
re_str = r'\(\\'
print(re.fullmatch(re_str, '(\\'))
re_str = r'(\d{3})\1([a-z]{2})\2\1'
print(re.fullmatch(re_str, '123123bbbb123'))
04-reモジュールの関数
1. compile
compile(正規表現文字列)-->正規表現文字列を正規表現オブジェクトに変換
re_objct = re.compile(r'\d+')
print(re_objct)
print(re_objct.fullmatch('23738'))
2.fullmatchとmatch
fullmatch(正規表現文字列、文字列)-->正規表現で文字列を完全に一致させ(文字列全体を一致させる)、一致オブジェクト(SRE_Match)またはNoneを返します.
match(正規表現文字列、文字列)-->文字列の先頭に一致し、一致するオブジェクトまたはNoneを返します.
result = re.fullmatch(r'\d([a-zA-Z]+)123', '2hjdh123')
print(result)
# 1.span(group=0) --> ( )
print(result.span(0))
print(result.start(1)) #
print(result.end(1)) #
# 2.group(group = 0) -->
"""
group()/group(0) -->
group(index>0) --> group
"""
print('0:',result.group())
print('1:',result.group(1))
# 3.string -->
print(result.string)
result = re.match(r'\d([a-zA-Z]+)123', '2hjdh123ABC')
print('match:',result)
3.search
search(正規表現、文字列)-->正規表現を満たす文字列の最初の文字列を検索します.戻り値は、一致するオブジェクトまたはNoneです.
result = re.search(r'(\d)[a-zA-Z]+', 'uhsh2hdje+984nf')
print(result.group(0))
print(result.group(1))
print(result.string)
# : search
# 'abc34jshd8923jkshd9lkkk890k' --> 34,8923,9,890
re_str = r'\d+'
str1 = 'abc34jshd8923jkshd9lkkk890k'
result = re.search(re_str, str1)
while result:
print(result)
str1 = str1[result.end():]
result = re.search(re_str, str1)
4.findall
findall(正規表現、文字列)-->正規表現を満たす文字列のすべてのサブ列を取得し、式にパケットがある場合、値を取るときにパケットに一致する結果のみを取るリスト注意を返します.複数のグループがある場合、各グループが一致する結果は、元の要素として使用されます.
re_str = r'(\d+)k([a-d]+)'
str1 = 'abc34kshd8923kabcshd9lkkk890kaa'
result = re.findall(re_str, str1)
print(result) # [('8923', 'abc'), ('890', 'aa')]
re_str = r'(\d+)k[a-d]+'
str1 = 'abc34kshd8923kabcshd9lkkk890kaa'
result = re.findall(re_str, str1)
print(result) # ['8923', '890']
re_str = r'\d+k[a-d]+'
str1 = 'abc34kshd8923kabcshd9lkkk890kaa'
result = re.findall(re_str, str1)
print(result) # ['8923kabc', '890kaa']
5.finditer
finditter(正規表現、文字列)-->正規条件を満たすすべてのサブ列を検索します.戻り値は反復器、反復器の要素は一致オブジェクトです.
re_str = r'\d+'
str1 = 'abc34kshd8923kabcshd9lkkk890kaa'
result = re.finditer(re_str, str1)
print(result)
for item in result:
print(item)
6. split
split(正規表現、文字列)-->正規表現の条件を満たすサブ列で文字列を分割
str1 = 'ahsb1sssa8-jjhd7nhs+90nsjhf3-4hhh7+8kjj-'
result = re.split(r'[-+]', str1)
print(result)
7.sub
sub(正規表現、repl、文字列)-->正規表現条件を満たす文字列のサブ列をreplに置き換えます.置換後の文字列を返します
str1 = 'hsj8jskfh98ssjj8hshh'
result = re.sub(r'\d+','*', str1)
print(result)
str1 = ' , ? , , '
result = re.sub(r' \s* | |fuck| | \s* ', '*', str1)
print(result)
with open('./data', 'r', encoding='utf-8') as f:
content = f.read()
# "name": " "
result = re.findall(r'"name":"(.+?)"', content)
print(result)