for line3 in myips matching too longer matches.

Cameron Simpson cs at cskk.id.au
Wed Jun 26 19:08:11 EDT 2019


On 26Jun2019 14:21, Chris Roberts <thecjguy1 at gmail.com> wrote:
>
>###
>CODE:
>           elif line1.rstrip(‘\n’) in line2.strip(‘\n’):
>               for line3 in myips:
>                   print “###”
>                   print “line1 is %s” % line1.rstrip(‘\n’)
>                   print “line2 is %s” % line2.strip(‘\n’)
>###
>OUTPUT:
>line1 is 10.10.168.2
>line2 is              - address: 10.10.168.27  # myhost
>###
>
>I think the problem is here:
>line1.rstrip(‘\n’) in line2.strip(‘\n’):
>
>I want it to
>match only 10.10.168.2 AND 10.10.168.2:
>NOT match 10.10.168.2[0-9]
>
>If someone out there knows a simple solution. I would love to see it.

Well the usual solution is to break line2 in to "words".

When you go:

  '10.10.168.2' in ' - address: 10.10.168.27  # myhost'

you're testing a substring match. But if you go:

  '10.10.168.2' in ['-', 'address:', '10.10.168.27', '#', 'myhost']

it does a membership test i.e. does the _exact string_ '10.10.168.2' 
occur in this list of strings.

(This isn't magic, the "in" operator uses an object's __contains__ 
method (or falls back to iteration and comparison), so the nature of the 
test is driven by the type of the object being tested (on the right, for 
"in")).

So...

    address = line1.rstrip('\n')
    words = line2.split()
    if address in words:
        ...

Personally I'd be being pickier about line1 as well, but ifyour input is 
well defined that may not matter.

Cheers,
Cameron Simpson <cs at cskk.id.au>



More information about the Python-list mailing list