regular expressions and matches

2006-03-30 Thread Johhny
Hello,

I have recently written a small function that will verify that an IP
address is valid.

==SNIP==

import re
ipAddress = raw_input('IP Address : ')

def validateIP(ipAddress):
ipRegex =
r^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
re_ip = re.compile(ipRegex)
match = re_ip.match(ipAddress)
if not match:
print an error has occured with ipAddress
return match
else:
return match

print(validateIP(ipAddress))

==SNIP==

I was having issues trying to get my code working so that I could pass
the IP addresses and it would return a true or false. When it matches I
get something that looks like this.

python ip_valid.py
IP Address : 192.158.1.1
_sre.SRE_Match object at 0xb7de8c80

As I am still attempting to learn python I am interested to know how I
could get the above to return a true or false if it matches or does not
match the IP address. I would also like to expand that so that if the
IP is wrong it requests the IP address again and recalls the function.
I have done the same thing in php very easily but python appears to be
getting the better of me. Any assistance and advice would be greatly
appreciated.

Regards,

Johhny

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


Re: regular expressions and matches

2006-03-30 Thread Fredrik Lundh
Johhny wrote:

 I was having issues trying to get my code working so that I could pass
 the IP addresses and it would return a true or false. When it matches I
 get something that looks like this.

 python ip_valid.py
 IP Address : 192.158.1.1
 _sre.SRE_Match object at 0xb7de8c80

 As I am still attempting to learn python I am interested to know how I
 could get the above to return a true or false if it matches or does not
 match the IP address.

you can use the return value right away.  the match function/method
returns None if it fails to find a match, and None is treated as a false
value in a boolean context:

http://docs.python.org/ref/Booleans.html

if you get a match instead, you get a match object (SRE_Match),
which is treated as True.

if you really really really want to return True or False, you can do

result = bool(re.match(...))

/F



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


Re: regular expressions and matches

2006-03-30 Thread bruno at modulix
Johhny wrote:
 Hello,
 
 I have recently written a small function that will verify that an IP
 address is valid. 

(snip re.match() based solution - just one remark: compiling the regexp
on each function call is more than useless)

 I was having issues trying to get my code working so that I could pass
 the IP addresses and it would return a true or false. When it matches I
 get something that looks like this.
 
 python ip_valid.py
 IP Address : 192.158.1.1
 _sre.SRE_Match object at 0xb7de8c80
 
 As I am still attempting to learn python I am interested to know how I
 could get the above to return a true or false if it matches or does not
 match the IP address.

If you re-read the fine manual, you'll notice that re.match() returns
either None or a Match object. Since, in a boolean context, None evals
to False and a Match object to True, just convert the return of re.match
to a boolean:

  return bool(re_ip.match(ipAddress))

BTW, don't mix outputs and a logic. Your validateIp() function should
*only* validate, not print anything (except for debugging purpose, but
then it should either go to a log or at least to stderr, stdout is for
normal program outputs).

 I would also like to expand that so that if the
 IP is wrong it requests the IP address again and recalls the function.

Then wrap the raw_input()/validateIp() into a loop. And wrap this loop
into a function !-)

def get_valid_ip(prompt=please enter an ip,
 errormsg=Sorry, %s is not a valid ip):
  while True:
ip = raw_input(%s :  % prompt).strip()
if validateIp(ip):
   return ip
else:
  print errormsg % ip

ip = get_valid_ip()


 I have done the same thing in php very easily but python appears to be
 getting the better of me.

Knowledge doesn't map one-to-one from one language to another.


-- 
bruno desthuilliers
python -c print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '[EMAIL PROTECTED]'.split('@')])
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: regular expressions and matches

2006-03-30 Thread johnzenger

Johhny wrote:
 Hello,

 I have recently written a small function that will verify that an IP
 address is valid.

 ==SNIP==

 import re
 ipAddress = raw_input('IP Address : ')

 def validateIP(ipAddress):
 ipRegex =
 r^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$

Good lord!  You might as well be writing in assembly!  The re module
docs should include a customer warning label.

Regular expressions are not the answer here.  Probably 80% of the regex
virus could be stamped out if people used split instead.  How about
something simpler, like this:

def ipValid(ipAddress):
dots = ipAddress.split(.)
if len(dots) != 4:
return False
for item in dots:
if not 0 = int(item) = 255:
return False
return True

...although even this function (like yours) will declare as valid an
IP address like 0.255.0.0.

For a real-world application, how about:

import socket
try:
mm = socket.inet_aton(ipAddress)
return True # We got through that call without an error, so it is
valid
except socket.error:
return False # There was an error, so it is invalid


 re_ip = re.compile(ipRegex)
 match = re_ip.match(ipAddress)
 if not match:
 print an error has occured with ipAddress
 return match
 else:
 return match

 print(validateIP(ipAddress))

 ==SNIP==

 I was having issues trying to get my code working so that I could pass
 the IP addresses and it would return a true or false. When it matches I
 get something that looks like this.

 python ip_valid.py
 IP Address : 192.158.1.1
 _sre.SRE_Match object at 0xb7de8c80

 As I am still attempting to learn python I am interested to know how I
 could get the above to return a true or false if it matches or does not
 match the IP address. I would also like to expand that so that if the
 IP is wrong it requests the IP address again and recalls the function.
 I have done the same thing in php very easily but python appears to be
 getting the better of me. Any assistance and advice would be greatly
 appreciated.
 
 Regards,
 
 Johhny

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