REGEX匹配多行

时间:2017-03-06 20:57:12

标签: python regex

无法匹配多行的正则表达式。 我尝试了一些,但没有运气。

首先尝试: ((?:\ b#show)(?:。* \ n?){6})

结果:失败。发现线条可以在5-8之间的任何地方,有时更少或更多。所以匹配6次是行不通的。

第二次尝试: (小于?=#\ n)的(。?显示*版本)

结果:失败:虽然我在其他比赛中成功使用了类似的正则表达式,但在任何事情上都不匹配。

字符串我正在尝试匹配。

wgb-car1# show startup-config
Using 6149 out of 32768 bytes
!
! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user
!
version 12.4
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!

我正在尝试匹配从show到版本号的所有内容。

此正则表达式(?s)#show(。*)version 但我不知道如何获取数字,因为它们可以是小数的任意组合,但总是数字。

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式

<3>

<强> DEMO

python demo

(?s)#\sshow\s*(.*?)version\s*([\d.]+)

答案 1 :(得分:0)

尝试将新行匹配到版本号,然后再匹配换行符。您可以使用(?sm:show.*\nversion)获取多行行为(使用(?sm:...)设置),然后使用.*$之后的非多线行为。

答案 2 :(得分:0)

一个答案(除其他外)使用pos。先行:

\#\ show
([\s\S]+?)
(?=version)

a demo on regex101.com

<小时/> 完整Python示例:

import re

string = """
wgb-car1# show startup-config
Using 6149 out of 32768 bytes
!
! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user
!
version 12.4
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!"""

rx = re.compile(r'''
    \#\ show
    ([\s\S]+?)
    (?=version)
    ''', re.VERBOSE)

matches = [match.group(0) for match in rx.finditer(string)]
print(matches)
# ['# show startup-config\nUsing 6149 out of 32768 bytes\n!\n! NVRAM config last updated at 15:50:05 UTC Wed Oct 1 2014 by user\n!\n']