python実戦シリーズの正則取得IPアドレス(八)
3873 ワード
1.正規表現re
pythonではreモジュールによって正規表現に関連する機能を実現し、正規表現はパターンマッチングpatterであり、パターンマッチングによって文字の検索searchとマッチングmatch機能を実現し、正規表現でよく使われる原文字は以下の通りである.
げんもじ
代表的な意味
literal
「hello」などの文字列自体を表す
.
任意の文字
^
一致する文字列の先頭
$
一致する文字列の末尾
*
前の正規表現を0回または複数回一致させ、{0,}に相当する.
+
前の正規表現を1回または複数回一致させ、{1,}に相当する.
?
前の正規表現を0回または1回一致させ、{0,1}に相当する.
{M,N}
前の正規表現に一致する最小M回、最大N回
{N}
前の正規表現に少なくともN回一致し、{N,}に相当する.
[]
[0-9],[a-z],[a-zA-Z]などの文字列グループ内の任意の文字を一致させる
[^]
「^a-zA-Z」などの文字列グループ内の任意の文字を除外すると、すべての文字が除外されます.
\d
データd.txtなどの[0-9]に相当する数字
\D
dとは逆に[^0-9]に相当
\w
「a-zA-Z 0-9」に相当するアルファベットと数字を一致させる.
\W
アルファベットと数字を除いて、[^a-zA-Z 0-9]に相当します.
\s
空白の文字、tabを含んで、車に戻って、[trvf]に相当します
2.正規表現reの例
1.一致する数字
2.照合shell
>>> f = file('/etc/passwd','r')
>>> for line in f.readlines():
... re.findall('\/bin\/[a-z]*sh$',line.strip())
...
['/bin/bash']
[]
[]
['/bin/bash']
[]
['/bin/bash']
3.reモジュールの一般的な方法
reはpythonが正規表現に関連する機能を実現するモジュールで、このモジュールには多重方法が含まれており、一般的な方法はsearch()を検索し、matchに一致し、すべてのfindall()を検索し、compile()をコンパイルし、split()を切断し、置換sub()を検索するなどの方法があり、下から説明します.
1.match()は、一致し、文字列の先頭ビットから検索を開始し、見つかったら返し、見つからなかったら空
2.search()は、文字列の開始から終了まで検索し、検索すると返され、見つからないと空になります.
3.compile()は、正規表現をコンパイルし、繰り返し使用しやすく、search()、match()、findall()関数と組み合わせて使用する必要があります.
4.findall()は、すべての文字列から検索され、見つかったらリストに追加され、リストとして表示され、見つからなかったらリストが空になります
4.正規表現によるIPアドレスの取得
pythonではreモジュールによって正規表現に関連する機能を実現し、正規表現はパターンマッチングpatterであり、パターンマッチングによって文字の検索searchとマッチングmatch機能を実現し、正規表現でよく使われる原文字は以下の通りである.
げんもじ
代表的な意味
literal
「hello」などの文字列自体を表す
.
任意の文字
^
一致する文字列の先頭
$
一致する文字列の末尾
*
前の正規表現を0回または複数回一致させ、{0,}に相当する.
+
前の正規表現を1回または複数回一致させ、{1,}に相当する.
?
前の正規表現を0回または1回一致させ、{0,1}に相当する.
{M,N}
前の正規表現に一致する最小M回、最大N回
{N}
前の正規表現に少なくともN回一致し、{N,}に相当する.
[]
[0-9],[a-z],[a-zA-Z]などの文字列グループ内の任意の文字を一致させる
[^]
「^a-zA-Z」などの文字列グループ内の任意の文字を除外すると、すべての文字が除外されます.
\d
データd.txtなどの[0-9]に相当する数字
\D
dとは逆に[^0-9]に相当
\w
「a-zA-Z 0-9」に相当するアルファベットと数字を一致させる.
\W
アルファベットと数字を除いて、[^a-zA-Z 0-9]に相当します.
\s
空白の文字、tabを含んで、車に戻って、[trvf]に相当します
2.正規表現reの例
1.一致する数字
>>> import commands
>>> network = commands.getstatusoutput('ifconfig')
>>> import re
>>> re.findall('[0-9]+',network[1])
# , \d+
>>> re.findall('\d+',network[1])
1:
>>> re.findall('\d',network[1])
2: 0-99 ,0-9 [0-9] ,10-99 [1-9]{1,2}, [0-9]{1,2}
>>> re.findall('[0-9]{1,2}',network[1])
3: 0-255 , :0-99 [0-9]{1,2},100,199 1[0-9][0-9],200-249 2[0-4][0-9],250-255 25[0-5]
>>> re.findall('[0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5]',network[1])
2.照合shell
>>> f = file('/etc/passwd','r')
>>> for line in f.readlines():
... re.findall('\/bin\/[a-z]*sh$',line.strip())
...
['/bin/bash']
[]
[]
['/bin/bash']
[]
['/bin/bash']
3.reモジュールの一般的な方法
reはpythonが正規表現に関連する機能を実現するモジュールで、このモジュールには多重方法が含まれており、一般的な方法はsearch()を検索し、matchに一致し、すべてのfindall()を検索し、compile()をコンパイルし、split()を切断し、置換sub()を検索するなどの方法があり、下から説明します.
1.match()は、一致し、文字列の先頭ビットから検索を開始し、見つかったら返し、見つからなかったら空
>>> str = 'Hello python boys'
>>> if m is not None:
... print " "
... print " :%s" % (m.group())
... else:
... print " "
...
:Hello
#
>>> m = re.match('python',str)
>>> print m
None
>>> if m:
... print "match,string is:%s" % (m.group())
... else:
... print "not match"
...
not match
@@ , match() search() , , group() , , :match() , search()
2.search()は、文字列の開始から終了まで検索し、検索すると返され、見つからないと空になります.
>>> m = re.search('python',str)
>>> print m
<_sre.sre_match>
>>> if m:
... print "match,string is:%s" % (m.group())
... else:
... print "not match"
...
match,string is:python
3.compile()は、正規表現をコンパイルし、繰り返し使用しやすく、search()、match()、findall()関数と組み合わせて使用する必要があります.
>>> regex=re.compile('python')
>>> regex.search(str)
<_sre.sre_match>
>>> m = regex.search(str)
>>> print m
<_sre.sre_match>
>>> if m:
... print "match,string:%s" % (m.group())
... else:
... print "not match"
...
match,string:python
>>> m=regex.match(str)
>>> print m
None
4.findall()は、すべての文字列から検索され、見つかったらリストに追加され、リストとして表示され、見つからなかったらリストが空になります
>>> re.findall('o',str)
['o', 'o', 'o']
:
>>> regex=re.compile('o')
>>> regex.findall(str)
['o', 'o', 'o']
4.正規表現によるIPアドレスの取得