正規表現-reモジュールの使用

4612 ワード

正規表現の基本的な使用
一、reモジュール
正規表現は、処理文字列に一致するために使用されます.
pythonで正規表現を使用するにはreモジュールを導入する必要があります.
import re

二、search()とmatch()の違い
match()関数は、stringの開始位置で文字が一致しているかどうかを検出します.search()はstring全体をスキャンしてマッチングを検索します.
すなわちmatch()は0位置マッチングに成功した場合にのみ返され,位置マッチングを開始しなければmatch()はnoneを返す.
>>> import re
>>> a = 'hello world'
>>> b = re.search('w',a)
>>> b
<_sre.sre_match object="" span="(6," match="w">
>>> b.group()
'w'
>>> c = re.match('w',a)
>>> c
>>> d = re.match('h',a)
>>> d
<_sre.sre_match object="" span="(0," match="h">
>>> d.group()
'h'
>>>

三、ワイルドカード
文字
説明
.
改行以外の任意の文字を一致させる
*
前の文字に一致するのは0回または数回ではなく、少なくとも0回は貪欲(最大)に一致します.
+
前の文字に一致するのは1回または数回ではなく、少なくとも1回は貪欲(最大)に一致します.
\d
一致する数値、デフォルトは1つのみ一致します
\D
非数値に一致し、デフォルトでは1つのみ一致します.
\s
スペースを一致させ、デフォルトでは1つしか一致しません.
\S
非スペースの一致、デフォルトは1つのみ
\w
0-9 a-z A-Z_にマッチし、デフォルトでは1つしか一致しません
\W
マッチング非0-9 a-z A-Z_以外の文字は、デフォルトで1つしか一致しません
()
サブエクスプレッションの開始位置と終了位置をマーク
[]
[]内のいずれかの一致を満たすことができ、最大1つの一致しかできません.
?
非貪欲マッチングモード
ワイルドカード:.
>>> a = 'hello world'
>>> b = re.search('w.',a)
>>> b
<_sre.sre_match object="" span="(6," match="wo">
>>> b.group()
'wo'

ワイルドカード:*と?
>>> a = 'hello world'
>>> b = re.search('w.*',a)
>>> b
<_sre.sre_match object="" span="(6," match="world">
>>> b.group()
'world'
>>> c = re.search('w.*?',a)
>>> c
<_sre.sre_match object="" span="(6," match="w"/>

ワイルドカード:+と?
>>> a = 'hello world'
>>> b = re.search('w.+',a)
>>> b
<_sre.sre_match object="" span="(6," match="world">
>>> c = re.search('w.+?',a)
>>> c
<_sre.sre_match object="" span="(6," match="wo"/>

ワイルドカード:dとD
>>> a = '123abc456'
>>> b = re.search('\d',a)
>>> b
<_sre.sre_match object="" span="(0," match="1">
>>> c = re.search('\D',a)
>>> c
<_sre.sre_match object="" span="(3," match="a"/>
>>> a = '123abc456'
>>> d = re.search('\D*',a)  #            abc,           ,       0      ,    
>>> d   
<_sre.sre_match object="" span="(0," match="">    
>>> d = re.search('\D',a)
>>> d
<_sre.sre_match object="" span="(3," match="a">
>>> d = re.search('\D\D\D',a)
>>> d
<_sre.sre_match object="" span="(3," match="abc">
>>> d = re.search('\D+',a)
>>> d
<_sre.sre_match object="" span="(3," match="abc"/>

四、group使用
機能:グループ化[きのう:ぐるーぷ]
group()
一致する式全体を返します
group(i)
一致するグループ式を返します
>>> a = 'helloworldmynameismarry'
>>> b = re.search('(.*)world(.*)',a)
>>> b.group()
'helloworldmynameismarry'
>>> b.group(1)
'hello'
>>> b.group(2)
'mynameismarry'

五、findall使用
findallが抽出したのはリストオブジェクトでgroup()を使用する必要はありません.
文法:re.findall(‘一致したい文字式’,string)
a = 'http://www.baidu.com'
b = re.findall('\w',a)
print(b)   # ['h', 't', 't', 'p', 'w', 'w', 'w', 'b', 'a', 'i', 'd', 'u', 'c', 'o', 'm']
print(type(b)) # 

六、sub使用
機能:置換[きのう:ちかん]
文法:re.search(‘元stringで置換される文字’,‘新文字’,string)
a = 'http://www.baidu.com'
b = re.sub('w','c',a)   #  w   c
print(b)   # http://ccc.baidu.com