Pythonで正規表現を使って括弧内の文字列を取り出す!

プログラム

いつも調べてしまうので、自分のためにコードを残しておこうと思います。

Pythonで正規表現を使って、文字列から特定の部分を取り出す方法です。

括弧内の文字列だけ取り出す

文字列内の()に囲まれた部分を取り出してみます

s = "this_(is)_a_(pen)_desu"
reg = '(?<=\().+?(?=\))'
ret = re.findall(reg, s)
print(ret)
# ['is', 'pen']

解説

正規表現は、(?<=\().+?(?=\))になりますが、これは3つに分解して考えると理解できます。

  • 後読み」部分:(?<=hoge)の場合、”hoge”の後ろという意味をもつ正規表現です
  • 先読み」部分:(?=fuga)の場合、”fuga”の前という意味をもつ正規表現です
  • パターンマッチ部分:.+?の場合、”.”は任意の一文字、”+”は直前の文字が一回以上、”?”は直前の文字が0 or 1回以上の最長一致です。

いくつか例をだしてみます。

# HOGEとFUGAで囲まれた部分を取り出す
s = 'this_HOGEisFUGA_a_HOGEpenFUGA_desu'
reg = '(?<=HOGE).+?(?=FUGA)'
print(re.findall(reg, s))
# ['is', 'pen']
# {}で囲まれている数値を取り出す
s = 'this_{123}_a_{abc}_desu'
reg = '(?<={)[0-9]+(?=})'
print(re.findall(reg, s))
# ['123']

括弧も一緒に取り出したい場合

括弧も一緒に取り出したい場合は簡単です。

s = 'this_{123}_a_{abc}_desu'
reg = '{.*?}'
print(re.findall(reg, s))
# ['{123}', '{abc}']

要するに、「後読み」も「先読み」も必要なくなります。