Vijay
Vijay

Reputation: 1825

Regular Expression to Match the Whole line

I'm new to scripting and have been reading about how to use regular expressions.

I want to fetch the complete line matching a pattern.

My output is:

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

I tried writing a regex matching packet loss and tried to fetch the complete line but could not make it work.

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

But this output printed only:

00% packet loss
00% packet loss

Upvotes: 5

Views: 15524

Answers (3)

Ryan Haining
Ryan Haining

Reputation: 36882

First off, you want to use raw strings when providing the regex string, this is done by prefixing the string with an r, otherwise escape sequences will be absorbed.

\d will match digits, but not the dot that appears between them. Since you want that as a group you'll need r'(\d+\.\d+)'

(if you use search instead of match then you don't need to worry about this):Finally you'll need something to capture everything in the line up to that number as well, which can be done easily with .*, capturing any amount of characters. Your search pattern becomes:

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

If you want to be explicit about the start and end of the line, then use the ^ (start) and $ (end) special characters

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

Upvotes: 8

Matt W
Matt W

Reputation: 476

Try

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

'^' and '$' match the start and end of a line, respectively. You also don't need the parentheses unless you want to select the packet loss separately.

Upvotes: 4

Bonifacio2
Bonifacio2

Reputation: 3870

If you want to print the whole line you can just iterate through the lines and print those that contain 'packet loss'.

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

Upvotes: 2

Related Questions