Python正規表現【2】

黄舟
リリース: 2017-02-04 17:12:18
オリジナル
1691 人が閲覧しました

昨日の内容に引き続き、今日も早速実践していきましょう。正規表現は非常に強力で複雑であるため、前回学習した内容の範囲を超えているこの実験の部分については、関連ドキュメントを参照してください。このチュートリアルは、運用および保守エンジニアがすぐに作業を開始できるようにするためのものです。理解できない場合でも、直接代替ツールとして使用することもできます。

Telnet および SSH 自動検査スクリプトの正規表現を確認してください: DeviceName = re.search('.*(?=#show run)',telreply).group()、telreply は検査の内容であり、ログの先頭を開くと確認できます:

R1>enable
Password:
R1#terminal length 
0
R1#show run
Building 
configuration...
ログイン後にコピー

明らかに、この正規表現は '#show の前の任意の文字と一致します。 ' (改行文字を除く) の場合は、もちろん R1 です。

別のより複雑な実験を行って、より多くの構成フラグメントを傍受してみましょう。たとえば、次の構成では、このデバイスの各インターフェイスの IP アドレスを見つける必要があります:

############################
!
interface 
FastEthernet0/0
ip address 
192.168.1.200 255.255.255.0
duplex half
!
interface 
GigabitEthernet1/0
no ip 
address
shutdown
negotiation 
auto
!
interface 
Serial2/0
ip address 
192.168.2.200 255.255.255.0
!
############################
ログイン後にコピー

それをログに割り当てます: (実際の環境では、それを直接読み取ります。ログを取得)

log = '' #ここには引用符が 3 つあります。Enter キーを押して上記の設定を貼り付け、引用符を 3 つ入力して Enter キーを押します。 (複数行の文字列を貼り付けるには、3 つの引用符を使用できます)。

Python正規表現【2】

ここでログを確認してください:

>>> 
log
'\n!\ninterface 
FastEthernet0/0\n ip address 192.168.1.200 255.255.255.0\n duplex 
half\n!\ninterface GigabitEthernet1/0\n no ip address\n shutdown\n negotiation 
auto\n!\ninterface Serial2/0\n ip address 192.168.2.200 
255.255.255.0\n!\n'
>>>
ログイン後にコピー

文字列はすべて 1 行にあり、改行は実際には 'n' であることがわかります。 print(log) を使用すると、表示効果は次のようになります。上は改行あり。

Cisco 機器の設定が感嘆符 (!) で区切られており、各インターフェイスの先頭が「interface」であり、IP アドレスの前に「ip」が付いていることもわかります。 住所'。したがって、正規表現に「interface(.*)n」があり、これが特定のインターフェイス設定の最初の行と一致することは想像に難くありません。設定は「!」で終わるため、「!」の前の式には「(?=!)」が必要です。中間の設定の行数は可変です。確実に言えるのは、少なくとも 1 行の設定があり、改行文字、つまり '(.*n)+?)' が存在するということです。ここでの「+?」は、前の式 (.*n) を 1 回以上非貪欲に一致させることを意味します。かっこを使用するとキャプチャ効果が得られますが、キャプチャ効果をオフにしたい場合は、左かっこの後に ?: を続けます。この実験ではすべての文字列を照合するため、「re.findall()」が使用されます。これ以上の説明は不要です。コードを参照してください:

ljds = 
re.findall('interface(.*)\n((?:.*\n)+?)(?=!)',log)
>>> 
ljds
[(' FastEthernet0/0', 
' ip address 192.168.1.200 255.255.255.0\n duplex half\n'), (' 
GigabitEthernet1/0', ' no ip address\n shutdown\n negotiation auto\n'), (' 
Serial2/0', ' ip address 192.168.2.200 255.255.255.0\n')]
ログイン後にコピー

その結果、各インターフェイスの設定は、リストにネストされたインターフェイス名 + 設定のタプルに分割されます。

Python正規表現【2】

次に、インターフェイスと IP を再度キャプチャするための For ループを作成します。

Python正規表現【2】

操作の効果:

Python正規表現【2】

テストは完了です。各インターフェースの IP アドレスを取得するという目的は達成されます。

この方法を学んだので、今後はこの方法を使用して、たとえば、インターフェイスのステータスが元々「UP」であった場合に「DOWN」に変化した場合に、デバイスの構成やステータスを監視することができます。通知する電子メールを送信します。

上記は Python 正規表現 [2] の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート