python学習ノート4-正規表現
3831 ワード
import re--すべての正規表現に関連する機能がreモジュールに含まれています.
re.sub()--文字列置換
注意:
1)bは、左側に区切り記号が必要であることを示します.
2)正規表現の前の「r」はpythonに、文字列にエスケープする文字がないことを示す.eg.,'t'はタブであり,r't'は文字''が1文字'tに続く
re.search()--正規表現で文字列を一致させ、一致に成功した場合は一致オブジェクトを返し、一致に成功しなかった場合はnoneを返します.
注意:
1)?-- 表示一致オプション
2)M{0,3}--マッチング0~3回M
分散正規表現:
1.空白文字は無視されます.スペース、タブ、リターンは正規表現では一致しません.これらの文字を一致させるには、エスケープ文字''を追加する必要があります.
2.コメント情報(#で始まる行末まで)は無視されます.
3.正規表現をばらばらにする場合、reを渡す必要がある.VERBOSEパラメータ.
ケース:電話番号の照合
d:--すべての0-9数字に一致
D:--数字以外のすべての文字に一致
+:--1回または複数回一致
*:0回以上一致
正規表現記号とその意味:
$--文字列の末尾
^--文字列の先頭
x?-- 0回または1回のx文字を一致させる
x+:--1回または複数のx文字を一致させる
x*:--0回または複数回のx文字を一致させる
x{m,n}--一致m~n回のx文字を表す
x{n}--一致するn回のx文字を表します
(a|b|c)--一致aまたはbまたはcを表す
(x)--一致する文字列が格納され、re.search()オブジェクトを返すgroups()メソッドマッチングされた値を取得
d:--すべての0-9数字に一致
D:--数字以外のすべての文字に一致
b:--単語の境界を一致させる
re.sub()--文字列置換
>>> import re
>>> s= "100 NORTH BROAD ROAD"
>>> re.sub('ROAD$','RD.',s)
'100 NORTH BROAD RD.'
>>> s = "100 BROAD"
>>> re.sub('\\bROUAD$','RD.',s)
'100 BROAD'
>>> s='100 BROAD ROAD APT. 3'
>>> re.sub(r'\bROAD$','RD.', s)
'100 BROAD ROAD APT. 3'
>>> re.sub(r'\bROAD\b', 'RD.',s)
'100 BROAD RD. APT. 3'
注意:
1)bは、左側に区切り記号が必要であることを示します.
2)正規表現の前の「r」はpythonに、文字列にエスケープする文字がないことを示す.eg.,'t'はタブであり,r't'は文字''が1文字'tに続く
re.search()--正規表現で文字列を一致させ、一致に成功した場合は一致オブジェクトを返し、一致に成功しなかった場合はnoneを返します.
>>> import re
>>> pattern = '^M?M?M?$'
>>> re.search(pattern, 'M')
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern,'MM')
<_sre.SRE_Match object; span=(0, 2), match='MM'>
>>> re.search(pattern,'MMM')
<_sre.SRE_Match object; span=(0, 3), match='MMM'>
>>> re.search(pattern,'MMMMM')
>>> re.search(pattern,'')
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> import re
>>> pattern = '^M?M?M?$'
>>> re.search(pattern, 'M')
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern,'MM')
<_sre.SRE_Match object; span=(0, 2), match='MM'>
>>> re.search(pattern,'MMM')
<_sre.SRE_Match object; span=(0, 3), match='MMM'>
>>> re.search(pattern,'MMMMM')
>>> re.search(pattern,'')
<_sre.SRE_Match object; span=(0, 0), match=''>
注意:
1)?-- 表示一致オプション
2)M{0,3}--マッチング0~3回M
分散正規表現:
1.空白文字は無視されます.スペース、タブ、リターンは正規表現では一致しません.これらの文字を一致させるには、エスケープ文字''を追加する必要があります.
2.コメント情報(#で始まる行末まで)は無視されます.
3.正規表現をばらばらにする場合、reを渡す必要がある.VERBOSEパラメータ.
>>> pattern = '''
^ #beginning of string
M{0,3} #thousands - 0 to 3 Ms
(CM|CD|D?C{0,3}) #hundreds - 900(CM), 400(CD),0-300 (0 to 3 Cs) or 500-800
#(D, followed by 0 to 3 Cs )
(XC|XL|L?X{0,3}) #tens - 90(XC), 40(XL), 0-30 (0 TO 3 Xs), or 50~80
#(L, followed by 0 to 3 Xs)
(IX|IV|V?I{0,3}) #ones - 9 (IX), 4(IV),0-3 (0 to 3 Is),
#or 5~8 (V,followed by 0 to 3 Is)
$ #end of string
'''
>>> re.search(pattern, 'M', re.VERBOSE)
<_sre.SRE_Match object; span=(0, 1), match='M'>
>>> re.search(pattern, 'MCMLXXXIX', re.VERBOSE)
<_sre.SRE_Match object; span=(0, 9), match='MCMLXXXIX'>
ケース:電話番号の照合
d:--すべての0-9数字に一致
D:--数字以外のすべての文字に一致
+:--1回または複数回一致
*:0回以上一致
>>> phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
>>> phonePattern.search('work 1-(800) 555.1212 #1234').groups()
('800', '555', '1212', '1234')
正規表現記号とその意味:
$--文字列の末尾
^--文字列の先頭
x?-- 0回または1回のx文字を一致させる
x+:--1回または複数のx文字を一致させる
x*:--0回または複数回のx文字を一致させる
x{m,n}--一致m~n回のx文字を表す
x{n}--一致するn回のx文字を表します
(a|b|c)--一致aまたはbまたはcを表す
(x)--一致する文字列が格納され、re.search()オブジェクトを返すgroups()メソッドマッチングされた値を取得
d:--すべての0-9数字に一致
D:--数字以外のすべての文字に一致
b:--単語の境界を一致させる