Pythonで正規表現を使う方法のまとめです。
正規表現を使う(マッチさせたり置換したりする)方法と、正規表現自体を作る方法に分けてまとめます。
- 【使い方】マッチする文字列を取得
- 【使い方】マッチする文字列をすべて取得
- 【使い方】マッチする文字列を置換する
- 【作り方】まずは一文字を表現する
- 【作り方】グループ化して文字列を表現
- 【作り方】集合やグループを繰り返す
- 【作り方】正規表現で日本語を使う
- 【作り方】その他の正規表現
- 【作り方】改行をマッチさせる方法
- 【作り方】なるべく少ない文字とマッチさせる
- 参考
python 3.7.2
【使い方】マッチする文字列を取得
#coding:utf-8 import re target = r"exampleqwertyqwerty\n" pattern = "qwe" repattern = re.compile(pattern) #result = repattern.match(target) # match : 先頭からの一致をチェック result = repattern.search(target) # search : 一致する最初の一つを返す # resultにはre.Match型が入ってくる if result != None: # 一致しなかったらresult == None print(result.group()) # マッチした文字列を取得 print(result.start()) # マッチした文字列の開始indexを取得 print(result.end()) # マッチした文字列の終了indexを取得 print(result.span()) # マッチした文字列の(開始index, 終了index)のタプルを取得 else: print("該当なし")
【使い方】マッチする文字列をすべて取得
#coding:utf-8 import re target = r"exampleqwertyqwerty\n" pattern = "qwe" repattern = re.compile(pattern) results = repattern.findall(target) # strのlistが得られる for r in results: print(r)
【使い方】マッチする文字列を置換する
#coding:utf-8 import re target = r"exampleqwertyqwerty\n" pattern = "qwe" repattern = re.compile(pattern) result = repattern.sub("QWE", target) # マッチする文字列をQWEに置換 print(result) # str型
【作り方】まずは一文字を表現する
#coding:utf-8 import re # .は「任意の一文字」を表す pattern = "a.c" # []でくくると「その中のいずれか一文字」を表す(集合) pattern = "[abc]" # こんな感じで範囲を指定することもできる pattern = "[a-c]" # 二文字の集合はこんな感じに書いてもOK pattern = "a|b" # いろんな集合の省略表記 pattern = "\d" # 数字の集合 pattern = "\D" # 数字以外の集合 pattern = "\s" # 空白文字の集合 pattern = "\S" # 空白文字以外の集合 pattern = "\w" # 英数字の集合 pattern = "\W" # 英数字以外の集合 repattern = re.compile(pattern)
【作り方】グループ化して文字列を表現
#coding:utf-8 import re # ()でくくると文字列(グループ)を表す pattern = "(abc)" # 前節で作った一文字を組み合わせてグループを作れる pattern = "(a[0-5]\D)" repattern = re.compile(pattern)
【作り方】集合やグループを繰り返す
#coding:utf-8 import re # *は「0回以上の繰り返し」を表す pattern = "[a-c]*" pattern = "(abc)*" # +は「1回以上の繰り返し」を表す pattern = "[a-c]+" pattern = "(abc)+" # ?は「0回または1回」を表す pattern = "[a-c]?" pattern = "(abc)?" # {m}は「m回の繰り返し」を表す pattern = "[a-c]{3}" pattern = "(abc){3}" # {m, n}は「m回~n回の繰り返し」を表す pattern = "[a-c]{1,3}" pattern = "(abc){1,3}" repattern = re.compile(pattern)
【作り方】正規表現で日本語を使う
#coding:utf-8 import re # 日本語の正規表現にはuを付ける pattern = u"あ+" # 日本語の集合表現 pattern = u"[ぁ-ん]" # ひらがな pattern = u"[ァ-ン]" # カタカナ pattern = u"[ぁ-んァ-ン]" # ひらがなとカタカナ repattern = re.compile(pattern)
【作り方】その他の正規表現
#coding:utf-8 import re # ^で「文字列の先頭」を表す pattern = "^abc" # $で「文字列の末尾」を表す pattern = "abc$" repattern = re.compile(pattern)
【作り方】改行をマッチさせる方法
普通に正規表現を使うと任意の一文字を表す「.」に改行は含まれません。
改行を含むには次のようにします。
#coding:utf-8 import re # 改行を含む文字列 target = r'''abc abc''' # 正規表現 pattern = "abc." # re.S引数を渡すと正規表現の「.」が改行も含むようになる repattern = re.compile(pattern, re.S) # re.DOTALLと書いてもいい if repattern.search(target) != None: print("matched.") else: print("not matched.")
【作り方】なるべく少ない文字とマッチさせる
#coding:utf-8 import re target = "abcabcabc" # デフォルトはなるべく多い文字をマッチする -> abcabcabc pattern = "(abc)+" # ?をつけるとなるべく少ない文字とマッチする -> abc pattern = "(abc)+?" repattern = re.compile(pattern) result = repattern.search(target) if result != None: print(result.group()) else: print("not matched.")