「逆引きPython/正規表現」の編集履歴(バックアップ)一覧に戻る

逆引きPython/正規表現 - (2009/11/20 (金) 07:29:03) のソース

#contents(fromhere=true)

**正規表現を扱う
re.compile()で正規表現パターンを正規表現オブジェクトにコンパイルします。
 >>> import re
 >>> pat = re.compile("a")

match()やsearch()、split()、sub()などは下のように正規表現オブジェクトをコンパイルする方法とそのまま用いる方法があります。
 >>> import re
 >>> re.compile("a").match("abcdef")
 <_sre.SRE_Match object at 0xb7c05720>
 >>> re.match("a","abcdef")
 <_sre.SRE_Match object at 0xb7c05758>

Pythonの正規表現にはre.match()とre.search()があります。re.match()は文字列の初めからのマッチをチェックします。
 >>> import re
 >>> re.match("a","abcdef") #Match
 <_sre.SRE_Match object at 0xb7c05720>
 >>> re.match("c","abcdef") #No match
 >>> re.search("a","abcdef") #Match
 <_sre.SRE_Match object at 0xb7c05758>
 >>> re.search("c","abcdef") #Match
 <_sre.SRE_Match object at 0xb7c05720>

**正規表現を条件で用いる
 >>> import re
 >>> if re.compile("a").search("Bacon"):
 ...     print("OK")
 ... 
 OK

**正規表現を用いて文字列を区切る
 >>> re.split("\W+", "SPAM, Egg, Bacon")
 ['SPAM', 'Egg', 'Bacon']
 >>> re.split("(\W+)", "SPAM, Egg, Bacon")
 ['SPAM', ', ', 'Egg', ', ', 'Bacon']
 >>> re.split("(\W+)", "SPAM, Egg, Bacon", 1)
 ['SPAM', ', ', 'Egg, Bacon']

**正規表現演算子
(未完成)

*** ^
文字列の先頭にマッチ

*** $
文字列の末尾にマッチ

*** .
改行を除く任意の一文字にマッチ(設定により改行にマッチさせることも可能)

*** *
直前の表現の0回以上の繰り返しの文字列にマッチ(greedy, 可能な限り長い文字列にマッチ)

*** +
直前の表現の1回以上の繰り返しの文字列にマッチ(greedy, 可能な限り長い文字列にマッチ)

***?
直前の表現の0回(空文字列)または1回の繰り返しの文字列にマッチ(greedy, 可能な限り長い文字列にマッチ)

*** *?
"*"のnon-greedy版

*** +?
"+"のnon-greedy版

*** ??
"?"のnon-greedy版

*** {n,m}
直前の表現のn回以上m回以下の繰り返しの文字列にマッチ(greedy, 可能な限り長い文字列にマッチ)

*** {n,m}?
"{n,m}"のnon-greedy版

*** {n}
直前の表現のn回の繰り返しの文字列にマッチ

*** {n,}
直前の表現のn回以上の繰り返しの文字列にマッチ

*** [...]

*** [^...]

*** (...)

*** (?...)


*** \d
任意の数字([0-9])にマッチ

*** \D
任意の非数字([^0-9])にマッチ

*** \s
任意のホワイトスペース([ \t\n\r\f\v])にマッチ

*** \S
任意の非ホワイトスペース([^ \t\n\r\f\v])にマッチ

*** \w
任意の英数字([a-zA-Z0-9_])にマッチ

*** \W
任意の非英数字([^a-zA-Z0-9_])にマッチ

----