我需要从几个文件中获取一个字符串,该字符串以:
开头line vty (digit) (digit)
然后可能没有,一个或多个换行符,其中包含最终文本,直到这一行出现:
access-class (some more text)
简而言之,我如何匹配这些行之间的所有内容,包括他们自己。
仅供参考:我想用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
答案 0 :(得分:0)
诀窍是使用单行模式(即.
匹配所有内容,包括换行符。这可以通过将正则表达式置于(?s)
之前或使用Python中的re.DOTALL
标志来完成。由于"line vty (digits) (digits)"
根据位数可以有一个可变长度,因此不能使用正面的后视。
相反,只需使用正则表达式(?s)line vty \d+ \d+\s*(.*?)\s*access-class
并提取第一个捕获组的内容。
答案 1 :(得分: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