正規表現の使用、reモジュールおよびモジュールのREモジュールでの使用
6171 ワード
目次
モジュールの定義
モジュールの種類
レモジュール
三つの検索方法findll search match
文字列処理の拡張:置換 カット
レモジュールのステップ
comple:正規表現を使って問題を解決する時間を節約します.
finditerは正規表現を使って問題を解決する時間/メモリを節約します.
モジュールにグループ化した使用
グループ名
正規表現の使い方
マッチング整数
ラベルを合わせる
爬虫類の例
モジュールの定義
モジュールは機能の集合です.モジュールはpythonが提供してくれて、この内容を操作する方法です.この操作する内容はもともと存在します.
例:タイムモジュールはpythonで時間を操作し、pythonに時間計算時間を表示します.
モジュールの種類
pythonで正規表現を使用して、先にREモジュールを導入します.
三つの検索方法findll search match
findll:すべてのマッチ可能な要素にマッチします.各項目はリストの中の要素です.
文法:findll(正規表現、一致する文字列、flags)
例:
import re
ret=re.findall('\d+','shdu128wer93')
print(ret)
:
['128', '93']
search:左から右への最初の一致だけが得られたのはマッチングの結果ではなく、変数のgroup方法で結果を取得します.もし該当しない場合は、Noneに戻ります.グループを使うとエラーが発生します.例:
import re
ret=re.search('\d+','shdu128wer93')
print(ret)# , <_sre.sre_match object="" span="(4," match="128">
print(ret.group())# ret.group() 128
もし該当しない場合は、Noneに戻ります.グループを使うとエラーが発生します.おすすめの書き方:
ret=re.search('\d+','shdu128wer93')
if ret:
print(ret.group()) #128
match:最初からマッチします.searchの正規表現に'^'を加えます.例:
ret=re.match('\d+','shdu128wer93')
#ret=re.match('^\d+','shdu128wer93')
print(ret) #None
ret=re.match('\d+','128shduwer93')
#print(ret) #<_sre.sre_match object="" span="(0," match="128"/>
文字列処理の拡張:置換 カットスプリット:リストに戻り、正規表現でカットすると、デフォルトでマッチした内容がカットされます.
例:
s='alex83taibai83egon25'
ret=re.split('\d+',s)
print(ret) #['alex', 'taibai', 'egon', '']
sub:(正規表現は、該当する内容を置換し、該当する文字列、置換回数)例:文字列の数字をHに置き換えて、置換を要求します.
ret=re.sub('\d+','H','alex83taibai83egon25',1)
print(ret) #alexHtaibai83egon25
subn:元のグループを返します.2番目の要素は置換回数です.ret=re.subn('\d+','H','alex83taibai83egon25')
print(ret) #('alexHtaibaiHegonH', 3)
レモジュールのステップcomple:正規表現を使って問題を解決する時間を節約します.
正規表現をコンパイルして、コンパイル結果でsearch、match、findell、finditerに行けば、時間を節約できます.何度も使用しているうちに、何度もコンパイルすることができません.
例:
ret=re.compile('\d+') # ,
print(ret)
res=ret.findall('alex83taibai83egon25')
print(res)
res=ret.search('alex83taibai83egon25')
print(res.group())
# :
re.compile('\\d+')
['83', '83', '25']
83
finditerは正規表現を使って問題を解決する時間/メモリを節約します.finditer は、すべての結果は、このサブジェネレータにあります.ループ+groupの形で値を取る必要があります.スペースを節約することができます.
例:
ret=re.finditer('\d+','128shduwer93') # : ,
print(ret) #
for i in ret:
print(i.group())
:
128
93
モジュールにグループ化した使用ほとんどの場合、私たちが欲しいデータはいらない間に混ぜられます.この時には、私たちが欲しい内容をグループで抽出する必要があります.
まず、グループを理解する例を示します.
文字列'ウォーハ'から私たちが欲しい内容を抽出することができます.
import re
s='ウォーハ'
ret=re.search('(\w+)(\w+)>',s)
print(ret.group(0)) # ,0
print(ret.group(1)) #
print(ret.group(2))
print(ret.group(3))
:
ウォーハ
a
wahaha
a
findllは、パケット内のコンテンツを取り込むこともでき、パケット内のコンテンツを優先的に表示する特殊な文法がある.ret=re.findall('>(\w+)
しかし、グループ優先は必要ない場合があります.グループ優先はどうやってキャンセルしますか?パケットの優先度は、グループに疑問符を付けるだけです.(?:正規表現)
例:
ret=re.findall('\d+(\.\d+)?','1.234*2.345')
# ,
print(ret) #['.234', '.345']
#
ret=re.findall('\d+(?:\.\d+)?','1.234*2.345')
print(ret) #['1.234', '2.345']
(\.[w+]+)
(\w+)(\w+)>
スプリット:了解すればいいです.ret=re.split('\d+','alex83taibai83egon25') # ['alex', 'taibai', 'egon', '']
print(ret)
ret=re.split('(\d+)','alex83taibai83egon25') # , ['alex', '83', 'taibai', '83', 'egon', '25', '']
print(ret)
グループ名(?P正規表現)
上に述べたように、group()のパラメータでマッチ内容を取得します.ここでは、グループ名でマッチ内容を取得することもできます.
例:
s='ウォーハ'
ret=re.search('>(?P\w+)
場合によっては、前のグループを使用してもいいです.この名前のグループを使用して、前の同名グループのコンテンツと一致する必要があります.s='ウォーハ'
pattern='\w+)>(\w+)(?P=tab)>'
ret=re.search(pattern,s)
print(ret) # <_sre.sre_match object="" span="(0," match="<a>wahaha</a>">
反例:現在の後が一致しない場合、マッチできませんでしたに両替する.s='ウォーハ
pattern='\w+"(\w+)(?P=tab)>'
ret=re.search(pattern,s)
print(ret) None
正規表現の使い方マッチング整数
# ,
ret=re.findall(r"\d+\.\d+|\d+","1-2*(60+(-40.35/5)-(-4*4))")
print(ret)#['1', '2', '60', '40.35', '5', '4', '4']
#
ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*4))")
print(ret)#['1', '2', '60', '', '5', '4', '4']
ret.remove('')#
print(ret)#['1', '2', '60', '5', '4', '4']
ラベルを合わせるs='ウォーハ'
ret=re.search('>(?P\w+)
爬虫類の例 正規表現で豆瓣映画を取得します.