python学習ノート4-正規表現

3831 ワード

import re--すべての正規表現に関連する機能がreモジュールに含まれています.
 
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:--単語の境界を一致させる