takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

Python3 で正規表現を使ったときのメモ

目的

Python3 で正規表現を使うときの備忘録とする

環境

  • Jupyter Notebook
  • Python3.6

参考

Python3.6 の公式ドキュメント
6.2. re — 正規表現操作 — Python 3.6.3 ドキュメント

ciscoconfparse

github.com

方針

re.compile を使う

コード

import re # 標準ライブラリの re モジュールのインポート

# サンプルテキストの作成
text = """!
interface GigabitEthernet0/0/0/1
 description *** foo bar ***
 ip address 10.0.0.1 255.255.255.0
 switchport foo
 pen
 pineapple
 apple
!
interface GigabitEthernet0/0/0/2
 description *** baz ***
 ip address 172.16.1.1 255.255.255.0
 switchport foo
 pen
 pineapple
 apple
!
"""

# マルチラインと、ドットオールを使う。
# フラグを指定することで利用できる。
# (?P<desc>... とすることで desc で呼べるようにしている。
p = re.compile('^(?P<desc>[^!]*{}.*?)!'.format("baz"), flags=(re.MULTILINE | re.DOTALL))
m = p.search(text)
print(m.group('desc'))

# OUTPUT
#interface GigabitEthernet0/0/0/2
# description *** baz ***
# ip address 172.16.1.1 255.255.255.0
# switchport foo
# pen
# pineapple
# apple
#!

後書き

もしかしたら、 re.DOTALL は必要なかったかも知れない。テキストが長くなっても抜き出したい部分をちゃんと抜き出せるようになりたい。