trying to match a string

Andrew Freeman alif016 at gmail.com
Sat Jul 19 16:45:22 CEST 2008


John Machin wrote:
> On Jul 19, 12:04 pm, Andrew Freeman <alif... at gmail.com> wrote:
>   
>> To show if valid:
>>
>> if re.search(r'^[LRM]*$', 'LM'):
>>     print 'Valid'
>>
>>     
>
> A couple of points:
> (1) Instead of search(r'^blahblah', ...) use match(r'blahblah', ...)
> (2) You need to choose your end-anchor correctly; your pattern is
> permitting a newline at the end:
>
>   
>>>> re.search(r'^[LRM]*$', 'LM\n')
>>>>         
> <_sre.SRE_Match object at 0x00B9E528>
>   
> --
> http://mail.python.org/mailman/listinfo/python-list
>   
Thanks for your pointers, however have a question regarding the first:

 >>> import re
 >>> def my_match(var):    # my original
 >>>     if re.search(r'^[LRM]*$', var):
 >>>         print 'Valid'
 >>>     else:
 >>>         print 'invalid'
 >>> def other_match(var):   # your suggestion, I believe
 >>>     if re.search(r'[LRM]*$', var):
 >>>         print 'Valid'
 >>>     else:
 >>>         print 'Invalid'
 >>>
 >>> eg = 'LRLRLRLRLM'
 >>> fg = 'LRLRLRNL'
 >>> my_match(eg)
Valid    # correct!
 >>> my_match(fg)
Invaild  # correct!
 >>>
 >>> other_match(eg)
Valid # correct!
 >>> other_match(fg)
Vaild     # INCORRECT, please explain

I believe other_match was your suggestion; to remove the ^
my_match is just a renamed version of my original function

Point 2:
Yes, I totally agree with you on point 2, let me try to combine my 
knowledge and make a satisfactory function.

 >>> def final_match(var):
 >>>     if re.search(r'^[LRM]*\Z', var): # replace $ with \Z to limit 
newlines
...         print 'Valid'
...     else:
...         print 'Invalid'
 >>>  final_match(eg)
Valid
 >>> final_match(fg)
Invalid
 >>> final_match(eg + '\n')
Invalid

So, in conclusion, is this function satisfactory?

def match(var):
    if re.search(r'^[LRM]*\Z', var):
        print 'Valid'
    else:
        print 'Invalid'
--
Andrew



More information about the Python-list mailing list