import re(Pythonのreモジュール)


回転:http://www.python8.org/a/fenleiwenzhang/yuyanjichu/2009/0901/150.html
今日はPythonの正規表現に関する知識を学びました.正規表現の文法については、説明しすぎず、ネット上で勉強している資料がたくさんあります.ここでは主にPythonでよく使われる正規表現の処理関数を紹介します.
 
メソッド/属性
作用
match()
REが文字列の最初の位置にマッチするかどうかを決定します.
search()
文字列をスキャンして、このREマッチングの位置を見つけます.
findll()
REマッチングのすべてのサブストリングが見つかりました.リストとして返します.
finditer()
REマッチングのすべてのサブストリングが見つかりました.そして、それらを一つのサブジェネレータとして返します.
 
match()関数は、REが文字列の先頭にマッチするかどうかを確認し、search()は文字列全体をスキャンします.
一度だけ成功したマッチを報告します.0から始まります.マッチングが0からでない場合は、match()は報告されません.
search()は文字列全体をスキャンし、その最初のマッチを報告します.
マッチ()、seerch()、finditer()が成功すれば、Match Objectオブジェクトに戻ります.このオブジェクトは以下の属性、方法があります.
 
メソッド/属性
作用
グループ()
REにマッチする文字列を返します.
start()
マッチ開始位置を返します.
end()
マッチの終了位置を返します.
span()
マッチング(開始、終了)を含むタプルの位置を返します.
 
 
 
グループ() re全体のマッチする文字列を返します.複数のグループ番号を一度に入力して、グループ番号に対応する文字列を入力します.
1.group()はre全体にマッチする文字列を返します.
2.グループ番号n、mが一致する文字列を返します.グループ番号が存在しない場合はindexErr異常を返します.
 
#!python
>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'
 
groups() 方法は、含まれるものを返します.
正規表現のすべてのグループ
文字列の元のグループは、1から含まれるグループ番号まで、
通常groups()はパラメータを必要とせず、元のグループに戻ります.元のグループの要素は正規表現で定義されたグループです.
 
#!python
>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.groups()
('abc', 'b')
インデックスを使用して対応するグループのコンテンツを取得します.例えば、m.groups()[0]
 
p 2=re.co mpile(r''(\d)+\w',re.X)  
>>p 2.match('123 a b 121 c').group()   # レ正規表現'(\d)+\wマッチする文字列
'123 a'
>>p 2.match('123 a b 121 c')group(0)
'123 a'
>>p 2.match('123 a b 121 c')group(1) #正規表現の最初のグループである(\d)にマッチする文字列を返します.
'3'
>>p 2.match('123 a b 12 123 c').groups() ('3',)
RE.matchは、文字列の先頭からマッチし、Match ObjectまたはNoneを返します.
RE.matchは、次の例では最初の単語と一致するように、文字列の先頭からパターンをマッチングさせることを試みる.
 
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), '
', m.group(1) else: print 'not match'
RE.matchの関数の原型は:re.match(pattern,string,flags)です.
最初のパラメータは正規表現で、ここは「(\w+)\s」です.成功すればMatchを返します.さもなければNoneを返します.
2番目のパラメータはマッチする文字列を表します.
第3のパラメータは、プジョービットであり、正規表現のマッチングを制御するために使用されます.例えば、大文字と小文字、複数行のマッチングなどが区別されますか?
 
 
メソッド/属性
作用
グループ()
REにマッチする文字列を返します.
start()
マッチ開始位置を返します.
end()
マッチの終了位置を返します.
span()
マッチング(開始、終了)を含むタプルの位置を返します.
 
re.search  文字列内でマッチを検索して、最初のマッチを見つけて、Match ObjectまたはNoneを返します.
RE.search関数は、最初のマッチを見つけてから戻ります.文字列が一致していない場合は、Noneに戻ります.
 
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
m = re.search(r'\shan(ds)ome\s', text)
if m:
print m.group(0), m.group(1)
else:
print 'not search'  
re.searchの関数のプロトタイプは、re.search(pattern,string,flags)です.
各パラメータの含意はre.matchと同じである. 
RE.matchとre.searchの違い:re.matchは文字列の開始だけにマッチしています.文字列が正規表現と一致しない場合、マッチングに失敗し、関数はNoneに戻ります.そして、マッチが見つかるまで、re.searchは文字列全体にマッチします.
re.sub   すべてのマッチ項目を置換し、置換後の文字列を返します.一致に失敗した場合、元の文字列を返します.
RE.subは、文字列内のマッチするものを置換するために使用されます.次の例では、文字列のスペース''を'-''に置換します. 
 
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print re.sub(r'\s+', '-', text) 
 re.subの関数のプロトタイプは、re.sub(pattern,repl,string,count)です.
2番目の関数は置換後の文字列です.この例では'-'です
4番目のパラメータは、置換個数です.デフォルトは0で、各マッチが置換されることを示します.
RE.subはまた、マッチング項目の置換に対して関数を使用して複雑な処理を行うことができる.例えば:re.sub(r'\s',lambada m:'+m.group(0)+',text,0);文字列の空白''を'[]'に置換します.
 
sub()メソッドは、文字列または関数、および処理する文字列の代替値を提供します.
 
モジュールレベルのre.sub()関数を使用すると、最初のパラメータとしてモードが使用されます.パターンは文字列または1つの‘RegexObject’かもしれません.正規表現のフラグを指定する場合は、‘RegexObject’を使って最初のパラメータを作成するか、sub(?(i)b+、'、''x'、'bbb BB')returns'x'などのモード補間器を使用しなければなりません. 
 
import redef hexrepl(match):     「Return the hex string for a decimal number」     value=int(match.group()     return hex(value)p=re.co.mpile(r'\d+')print p.sub(hexrepl,''ll 65490 for printing,49152 for user code.')ga Call 0 xffd 2 for printing,0 xc 000 foruser code.
 
 
import retext=「JGood is a handsome boy、he is cool、clever、and so on...」print re.sub(r'\s+'、'-'、text)jGood-mins-hadsome-boy、-he-cool、-clever、and-son'pref(Jgood)a[]handsome[]boy、[]he[]is[]cool、[]clever、[]and[]so[]on…
 
print re.sub(r'a',lambada m:''+m.group(0)+',text)aの両側に龛を加えて、string.replace()を使うこともできます.
皱JGood is[a]h[a]ndome boy、he is cool、clever、[a]nd son...
 
subn()  sub()と同じですが、新しい文字列と置換回数を返します.
print re.subn('i','I','Paris in the spring')  # ('PartIs In the sprIng',3)
 
空マッチは前のマッチがないときだけ置き換えられます.
ヽ.python
>>p=re.com mpile('x*)
>>p.sub('-','abxd')
'-a-b-d-'
 
re.split     分割された文字列をリスト形式で返します.
re.splitを使って文字列を分割することができます.例えば、re.split(r'\s+',text);文字列をスペースで区切って単語リストにします.
     
split(string [, maxsplit = 0])
 
maxsplit値を設定することでスライス数を制限できます.maxsplitがゼロでない場合は、最大でmaxsplit個のスライスしかありません.文字列の残りの部分はリストの最後の部分として返されます.次の例では、デリミタは、非数値文字の任意のシーケンスであってもよい.
#!python
>>> p = re.compile(r'\W+')
>>> p.split('This is a test, short and sweet, of split().')
['This', 'is', 'a', 'test', 'short', 'and', 'sweet', 'of', 'split', '']
>>> p.split('This is a test, short and sweet, of split().', 3)
['This', 'is', 'a', 'test, short and sweet, of split().']
時々、デリミタ間のテキストに興味があるだけでなく、デリミタが何かを知る必要があります.デリミタは、非数値文字の任意のシーケンスであり、括弧が取り込まれた場合は、 REで使用すると、それらの値もリストの一部として返されます.以下の呼び出しを比較します.
 
re.split(「([ab]」、「carbs」)  #   ['c','a','r','b','s']     デリミタはaまたはbであり、結果は規定子a、bに戻る.
re.split(「([ab]落)」、「carbs」) #  ['carbs']   デリミタはa〓またはb〓で、結果['carbs'] 
#!python
>>> p = re.compile(r'\W+')
>>> p2 = re.compile(r'(\W+)')
>>> p.split('This... is a test.')
['This', 'is', 'a', 'test', '']
>>> p2.split('This... is a test.')
['This', '... ', 'is', ' ', 'a', ' ', 'test', '.', '']
re.findall  マッチしたすべての文字列をリスト形式で返します.
re.findllは、文字列内のすべてのマッチする文字列を取得することができます.例えば:re.findll(r'\w*oo\w*、text);文字列に'oo'が含まれているすべての単語を取得します.
      
         (pattern) マッチ patternとこのマッチを取得します.
       import re       text=「JGood is a」  handsome boy,he is hadsome and cool,clever,and son..."
        print re.findll(r'\w*oo\\w*、text)33751;結果:''JGood'、'cool'       print re.findll(r'(\w)*oo(\w)*,text)はサブ表現の結果を表します.[('G','d'),('c','l')
 
 
Python 2.2でも使えます. finditer() 方法
#!python
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator

>>> for match in iterator:
...     print match.group() , match.span()
...     
12 (0, 2)
11 (22, 24)
10 (29, 31)
re.com mpile
正規表現を正規表現オブジェクトにコンパイルできます.よく使われる正規表現を正規表現のオブジェクトにコンパイルすることで、一定の効率を上げることができます.以下は正規表現オブジェクトの例です.