2017-11-07 16 views
-2

に一致する私はで始まるいくつかのファイルのうち、文字列を取得する必要があります。正規表現文字列から文字列

line vty (digit) (digit) 

そして、その中の最終的なテキストをなし、一つ以上の改行、があるかもしれませんこの行が来るまで、:要するに

access-class (some more text) 

は、どのように私はthemselfesを含むこれらの線との間のすべてのものと一致しません。

FYI:これをPythonで行いたいと思います。

試み:

(?<=line vty)(.*)(?=access-class) 
(?<=line vty)[a-zA-Z0-9\s\n\t]*(?=access-class) 
(?<=line vty)(.*\n)*(?=access-class) 

例:

line vty 0 4 
session-timeout 6000 
access-class ACL-4-MGMT-VTY-IN in vrf-also 
exec-timeout 30 30 
logging synchronous 
transport input ssh 
! 
line vty 5 15 
session-timeout 6000 
exec-timeout 30 30 
logging synchronous 
transport input ssh 
access-class ACL-4-MGMT-VTY-IN in vrf-also 
+2

あなたの試み –

+0

を投稿あなたは私たちが使用することができ、いくつかの具体的な例を持っていますか? – Allan

+0

'access-class'は常に* each *ブロックにありますか? –

答えて

0

トリックシングルラインモード(すなわち.は、改行文字を含むすべてを、一致する)を使用することです。これは、(?s)であなたの正規表現をプリペンドすることによって、またはPythonでre.DOTALLフラグを使用することによって行うことができます。 "line vty (digits) (digits)"は数字の桁数に応じて可変長を持つことができるため、正式な逆ビハインドは使用できません。

代わりに、正規表現(?s)line vty \d+ \d+\s*(.*?)\s*access-classを使用して、最初のキャプチャグループのコンテンツを抽出します。

Demo and step-by-step explanation.

+0

一致するものの前のブロックが 'access-class'を持っていない場合は、[どう見えるか](https://regex101.com/r/ONeSrm/2)を見てください。 「。*?」は、そのような体系化されたデータのための悪い考えです。 –

+0

@WiktorStribiżewはまだOPの仕様に合っています。たぶん、データはそうでも見えないかもしれません。多分私達は明確化を得るでしょう。 – timgeb

+0

ありがとう、これは私を助けてくれました。ただ1つの質問、これはアクセスクラスの後の行全体を含みますか? @timgeb –

0

あなたは、単に行うことができます。

import re 
string_1="""line vty 0 400 
session-timeout 6000 
access-class ACL-4-MGMT-VTY-IN in vrf-also 
exec-timeout 30 30 
logging synchronous 
transport input ssh 
! 
line vty 5 15 
session-timeout 6000 
exec-timeout 30 30 
logging synchronous 
transport input ssh 
access-class ACL-4-MGMT-VTY-IN in vrf-also""" 

pattern=r"line vty(.*?)access-class" 

match=re.finditer(pattern,string_1,re.IGNORECASE | re.DOTALL) 
for group in match: 
    print(group.group()) 

出力:

line vty 0 400 
session-timeout 6000 
access-class 
line vty 5 15 
session-timeout 6000 
exec-timeout 30 30 
logging synchronous 
transport input ssh 
access-class