この記事では Python の正規表現について説明します。
これ以上ナンセンスはやめて、最も単純なものから始めましょう:
'.': 改行を除く任意の 1 文字 (ドットのみ) と一致します。
'*' は、前の部分式と 0 回以上一致します (アスタリスクのみ)。
つまり、上記の 2 つの '.*' (ドットスター) の組み合わせは、改行文字を除くすべてに一致します。
「+」: 1 回以上繰り返します。
'?': 0 回または 1 回繰り返します。
'd': 数字と一致します。 [0-9]に相当します。
「w」は、アンダースコアを含む任意の単語文字に一致します。 「[A-Za-z0-9_]」と同等。
「/s」は、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 [fnrtv]
と同等 '^' は入力文字列の先頭と一致します。
「$」は入力文字列の末尾と一致します。
上記は非常に一般的に使用されるものですが、もちろん、さらに一般的に使用されるものがたくさんあります。必要に応じてマニュアルを確認してください。
この説明は十分に直観的ではないので、実験してみてください。 Python で正規表現を使用するのは簡単です。インポート re を直接実行するだけです:
>>> import re
>>>
最初にすべてを一致させてみます:
>>> vlan = 'switchport access vlan 612' >>> ljds = re.search('.*',vlan).group() >>> ljds 'switchport access vlan 612'
番号を再度一致させてください:
>>> ljds = re.search('\d',vlan).group() >>> ljds '6'
「/d」は数値に一致するため、ここで 3 つの数値である「612」を一致させたい場合は、「{3}」を追加できます:
>>> ljds = re.search('\d{3}',vlan).group() >>> ljds
'612'
同様に、一致させたい場合は、 13 文字 (スペースを含む):
>>> ljds = re.search('[\w\s]{13}',vlan).group() >>> ljds 'switchport ac'
また、正規表現の量指定子には貪欲モードと非貪欲モードが含まれることにも言及したいと思います。貪欲とは、最大値を取得し、できるだけ多くの一致を照合することです。非貪欲モードはその逆です (デフォルトは貪欲モードです)。例:
上記は 13 文字に一致します。2 ~ 10 文字に一致するように記述されている場合は、次のように記述します。つまり、2 文字に一致するのか、10 文字に一致するのか。デフォルトは貪欲モードなので、最大値と一致します:
>>> ljds = re.search('[\w\s]{2,10}',vlan).group() >>> ljds 'switchport'
非貪欲モード、つまり最小値一致に切り替えるには、量指定子の後に疑問符 '?' を追加します:
>>> ljds = re.search('[\w\s]{2,10}?',vlan).group() >>> ljds 'sw'
次に、「capture」を紹介します。 ":
(exp): 一致するexp。
(?=exp): exp の前の位置と一致します。
(?<=exp): exp の後の位置と一致します。
>>
OK、これを学習した後、前にルーター名を取得した正規表現を見てください:>>> ljds = re.search('(access)',vlan).group() >>> ljds 'access'