Python正则表达式匹配整行

时间:2014-12-19 19:14:12

标签: python regex

我是脚本新手,并且一直在阅读如何使用正则表达式。

我想获取与模式匹配的完整行。

我的ouptut是:

64 bytes from 33.33.33.33: icmp_seq=9 ttl=254 time=1.011 ms

--- 33.33.33.33 ping statistics ---
10 packets transmitted, 10 packets received, 0.00% packet loss

我尝试编写正则表达式匹配数据包丢失并试图获取完整的行但无法使其工作..

有人可以帮帮我..

cmd = re.search('(\d*)% packet loss', ping_result[int(i)], re.M|re.I)
print cmd.group()

但此输出仅打印

00% packet loss
00% packet loss

3 个答案:

答案 0 :(得分:4)

尝试

cmd = re.search('^.*\d*% packet loss.*$', ping_result[int(i)], re.M|re.I)
print cmd.group()

' ^'和' $'分别匹配一行的开头和结尾。 除非您想单独选择丢包,否则您也不需要括号。

答案 1 :(得分:4)

首先,你想在提供正则表达式字符串时使用原始字符串,这是通过在字符串前加r来完成的,否则转义序列将被吸收。

\d将匹配数字,但不匹配它们之间出现的点。由于您希望将其作为一个组,因此您需要r'(\d+\.\d+)'

最后你需要一些东西来捕捉到该数字的所有内容,这可以通过.*轻松完成,捕获任意数量的字符。您的搜索模式变为:

r'.*(\d+\.\d+)% packet loss'

如果您想明确该行的开头和结尾,请使用^(开始)和$(结束)特殊字符

r'^.*(\d+\.\d+)% packet loss$'

答案 2 :(得分:1)

如果您想要打印整行,您可以遍历这些行并打印那些包含“丢包”的行。

for line in lines:
    if line.find('packet loss') != -1:
        print line