Re: for line3 in myips matching too longer matches.

2019-06-26 Thread Sayth Renshaw
Chris Roberts  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.
> Thanks in advance. 
> crzzy1

Not sure exactly what the input is but a comprehension would do this.

[x for x in input_line.split(' ') if == '10.10.168.2']

Cheers

Sayth

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: for line3 in myips matching too longer matches.

2019-06-26 Thread Cameron Simpson

On 26Jun2019 14:21, Chris Roberts  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 
--
https://mail.python.org/mailman/listinfo/python-list