Regex Doubts
Cameron Simpson
cs at cskk.id.au
Fri Mar 30 03:13:29 EDT 2018
On 30Mar2018 11:46, Iranna Mathapati <iranna.gani28 at gmail.com> wrote:
>how to achieve fallowing expected output?
>
>str_output= """
>
>MOD1 memory : 2 valid 1790 free
>MOD2 memory : 128 valid 128 free
>UDP Aware *MEMR* : 0 valid 0 free *MEMR
> : 21 valid 491 free
><<<<<expecting *
>Feature XYZ : 3 valid 13 free
>Feature PQR : 0 valid 16 free
>Feature MNO : 0 valid 2 free
>
> """
>
>i am going to grep MEM values alone and i have tried fallowing Regex:
>
>re.findall(r'MEMR\s+\:\s+([0-9]+)\s+valid \s+([0-9]+)\s+free ', str_output)
>
>it produce fallowing output::
>[('0', '0'), ('21', '491')]
>
>Expected output and i am expecting fallowing output::
>*[('21' ,'491')] <<<<< how to achieve this output?*
I get an empty list with your str_output text. Is it intact above? Or modified
by the mail program?
That said, I see that your regexp ends with "free ". Are you sure there is a
space after the word "free" in your input data? There doesn't seems to be one
in your email. Because your regexp requires a final space, if there isn't one
in the input then it will not match.
It may be that your original data has this final space, hence your matches.
In which case, there are two "MEMR" words in your input data. Are there really
asterisks ("*") in the input data? Or are they for emphasis? I ask because
you've got some lines ending in "::" in your email, which is suggestive of some
formatting.
So, supposing that the asterisks are not there, you have two "MEMR : N valid
M free" strings up there. It sounds like you want only the nonzero one. Notice
that your regexp includes:
[0-9]+
to match 1 or more digits. If you don't want to recognise zero values, consider
that any such number doesn't commence with a "0" digit. How would you modify
the regexp above to be more picky?
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list