> ②Python正規表現 – ネットワークエンジニアチュートリアル

②Python正規表現

Python正規表現

マッチ機能

この関数はRE パターン文字列をオプションのフラグで照合しようとします。

この関数の構文は次のとおりです。

re.match(pattern, string, flags=0)

パラメータの説明は次のとおりです。

パラメータ 説明
パターン これは一致する正規表現です。
文字列 これは文字列で、文字列の先頭のパターンと一致するように検索されます。
フラグ ビットごとのOR(|)を使用して、異なるフラグを指定できます。これらは修飾子であり、以下の表にリストされています。

re.matchの機能を返し、マッチ成功、上のオブジェクトなし失敗した場合には。一致した式を得るには、matchオブジェクトのgroup(num)またはgroups()関数を使用します。

マッチオブジェクトメソッド 説明
グループ(num = 0) このメソッドは、完全一致(または特定のサブグループnum)
グループ() このメソッドは、タプル内のすべての一致するサブグループを返します(存在しない場合は空です)

#!/usr/bin/python
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
   print "matchObj.group(1) : ", matchObj.group(1)
   print "matchObj.group(2) : ", matchObj.group(2)
else:
   print "No match!!"

上記のコードが実行されると、次の結果が生成されます。

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

検索機能

この関数は、オプションのフラグを持つ文字列内の最初のRE パターンの出現を検索します。

この関数の構文は次のとおりです。

re.search(pattern, string, flags=0)

パラメータの説明は次のとおりです。

説明
pattern これは一致する正規表現です。
string これは、文字列内の任意の場所にパターンに一致するように検索される文字列です。
flags ビットごとのOR(|)を使用して、異なるフラグを指定できます。これらは修飾子であり、以下の表にリストされています。

re.searchの機能を返し、マッチ成功、上のオブジェクトなし失敗した場合には。一致した式を得るには、matchオブジェクトのgroup(num)またはgroups()関数を使用します。

説明
group(num=0) このメソッドは、完全一致(または特定のサブグループnum)
groups() このメソッドは、タプル内のすべての一致するサブグループを返します

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

上記のコードが実行されると、次の結果が生成されます。

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

マッチングと検索

:Pythonは、正規表現に基づいて、2つの異なるプリミティブな操作提供しています試合中に、文字列の先頭にのみマッチのためのチェックを検索どこにでもある文字列でのマッチのチェック(これはPerlがデフォルトで何をするかです)。

#!/usr/bin/python
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

上記のコードを実行すると、次の結果が生成されます。

No match!!
search --> matchObj.group() :  dogs

検索と置換

最も重要なの一つ再の正規表現を使用する方法があるサブ

構文

re.sub(pattern, repl, string, max=0)

この方法では、REのすべての出現置き換えるパターン文字列をしてREPLしない限り、すべてのオカレンスを置き換えて、最大で提供します。このメソッドは、変更された文字列を返します。

#!/usr/bin/python
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print "Phone Num : ", num

上記のコードを実行すると、次の結果が生成されます。

Phone Num :  2004-959-559
Phone Num :  2004959559

正規表現修飾子:オプションフラグ

正規表現リテラルには、マッチングのさまざまな側面を制御するためのオプションの修飾子を含めることができます。修飾子はオプションのフラグとして指定されます。前に示したように、排他的論理和(|)を使用して複数の修飾語を提供することができ、これらのいずれかで表すことができます –

re.I 大文字と小文字を区別しない一致を実行します。
re.L 現在のロケールに基づいて単語を解釈します。この解釈は、アルファベットグループ(\ wと\ W)と単語境界の振る舞い(\ bと\ B)に影響します。
re.M $を行末(文字列の終わりだけでなく)に一致させ、^文字列の先頭ではなく、行頭にマッチさせる。
re.S 改行を含む任意の文字にピリオド(ドット)を一致させます。
re.U Unicode文字セットに従って文字を解釈します。このフラグは、\ w、\ W、\ b、\ Bの動作に影響します。
re.X “かわいい”正規表現構文を許可します。それは空白を無視します(セット[]内またはバックスラッシュでエスケープされた時を除く)。エスケープされていない#をコメントマーカーとして扱います。

正規表現パターン

制御文字、(+?。* ^ $()[] {} | \)を除いて、すべての文字が一致します。コントロール文字の前にバックスラッシュを付けてエスケープすることができます。

次の表に、Pythonで利用可能な正規表現の構文をリストします。

^ 行頭に一致します。
$ 行末に一致します。
改行を除く任意の1文字にマッチします。mオプションを使用すると改行も一致させることができます。
[…] 括弧内の任意の1文字に一致します。
[^ …] 角かっこで囲まれていない任意の1文字と一致します。
re* 直前の式の0回以上かそれ以上に一致する
re + 1つ以上の先行する式に一致します。
re? 先行する式の0回または1回以上に一致します。
re{ n,} 先行する式のn回の正確な数に一致します。
re{ n,} 直前の式のn回以上の繰り返しに一致します。
re {n、m} 先行する式の少なくともn回と最大でm回の出現と一致します。
a| b aまたはbのいずれかに一致します。
(re) 正規表現をグループ化し、一致するテキストを覚えます。
(?imx) 正規表現内のi、m、またはxオプションを一時的に切り替えます。カッコ内の場合は、その領域のみが影響を受けます。
(γ-imx) 正規表現内のi、m、またはxオプションを一時的に切り替えます。カッコ内の場合は、その領域のみが影響を受けます。
(?:re) 一致するテキストを覚えていない正規表現をグループ化します。
(?imx:re) 括弧内のi、m、またはxオプションを一時的に切り替えます。
(γ-imx:re) 括弧内のi、m、またはxオプションを一時的に切り替えます。
(?#…) コメント。
(β= re) パターンを使用して位置を指定します。範囲がありません。
(?!再) パターンの否定を使用して位置を指定します。範囲がありません。
(?>再) バックトラッキングなしで独立したパターンに一致します。
\ w 単語の文字に一致します。
\ W 単語以外の文字と一致します。
\ s 空白と一致します。[\ t \ n \ r \ f]と同等です。
\ S 非空白と一致します。
\ d 数字に一致します。[0-9]と同じです。
\ D 非対称と一致します。
\ A 文字列の先頭に一致します。
\ Z 文字列の終わりに一致します。改行が存在する場合、改行の直前にマッチします。
\ z 文字列の終わりに一致します。
\ G 最後のマッチが終わったところを照合します。
\ b 括弧の外側にあるときに単語の境界に一致します。角括弧の中にある場合、バックスペース(0x08)に一致します。
\ B 非ワード境界に一致します。
\ n、\ tなど 改行、キャリッジリターン、タブなどに一致します。
\ 1 … \ 9 グループ化されたn番目の部分式に一致します。
\ 10 すでに一致している場合、n番目にグループ化された部分式に一致します。そうでなければ、文字コードの8進表現を参照します。

正規表現の例

リテラル文字

説明
python マッチ “python”。

文字クラス

説明
[Pp] ython “Python”または “Python”にマッチする
rub[ye] マッチ “ruby”または “rube”
[aeiou] 任意の小文字の母音に一致する
[0-9] 任意の数字に一致します。と同じである[0123456789]
[az] 任意の小文字のASCII文字に一致する
[AZ] 大文字のASCII文字にマッチする
[a-zA-Z0-9] 上記のいずれかにマッチする
[^ aeiou] 小文字の母音以外のものにマッチする
[^ 0-9] 数字以外のものと一致する

特殊文字クラス

説明
改行以外の文字にマッチする
\ d 数字を一致させる:[0-9]
\ D 非一致に一致する:[^ 0-9]
\ s 空白文字に一致する:[\ t \ r \ n \ f]
\ S 一致しない空白:[^ \ t \ r \ n \ f]
\ w 1単語の文字に一致する:[A-Za-z0-9_]
\ W 非英文字に一致する:[^ A-Za-z0-9_]

反復ケース

説明
ruby? マッチ “rub”または “ruby”:yはオプションです。
ruby* Match “rub” + 0以上ys
ruby+ Match “rub”に1つ以上のyを加えたもの
\ d {3} 3桁の正確に一致する
\ d {3、} 3桁以上一致
\ d {3,5} 3桁、4桁、または5桁の一致

貪欲でない繰り返し

これは最小の反復回数に一致します。

説明
<。*> 貪欲な繰り返し: “<python> perl>”にマッチします
<。*?> Nongreedy: “<python> perl>”の “<python>”にマッチします。

括弧でグループ化する

説明
\ D \ d + グループなし:+繰り返し\ d
(\ D \ d)+ グループ化:+繰り返し\ D \ dペア
([Pp] ython(、)?)+ “Python”、 “Python、python、python”などにマッチします。

後方参照

これは以前にマッチしたグループに再びマッチする –

説明
([Pp])ython&\ 1ails PythonとPailsまたはPythonとPailsをマッチさせる
([”])[^ \ 1] * \ 1 一重引用符または二重引用符の文字列。\ 1は最初のグループがマッチしたものと一致します。\ 2は、2番目のグループが一致したものと一致します。

代替案

説明
python | perl “python”または “perl”にマッチする
rub(y | le)) マッチ “ルビー”または “ルーブル”
Python(!+ | \?) “Python”の後に1つ以上の!または1つ?

アンカー

これは一致位置を指定する必要があります。

説明
^ Python 文字列または内部行の先頭に “Python”をマッチさせる
Python $ 文字列または行の最後に “Python”をマッチさせる
\ APython 文字列の先頭に “Python”をマッチさせる
Python \ Z 文字列の最後に “Python”をマッチさせる
\ bPython \ b 単語境界で “Python”にマッチする
\ brub \ B \ Bは単語境界ではなく、 “rube”と “ruby”の “rub”に一致しますが、単独ではありません
Python(?=!) 感嘆符が続く場合は “Python”にマッチします。
Python(?!!) “Python”にマッチし、その後に感嘆符がない場合はマッチします。

括弧付きの特殊構文

説明
R(?#コメント) “R”と一致します。残りはコメントです
R(ωi)uby “uby”にマッチしている間に大文字と小文字を区別しない
R(ωi:uby) 同上
rub(?:y | le)) 後方参照を\ 1作成せずにグループ化する

前のページ①Pythonオブジェクト思考

次のページ③

スポンサーリンク

ネットワークエンジニアになりたければ下記から無料相談会に参加!
なんと無料で授業を受けれてエンジニアになれます

投稿日:

執筆者: