trying to match a string

Andrew Freeman alif016 at gmail.com
Fri Jul 18 16:47:54 CEST 2008


oj wrote:
> On Jul 18, 12:10 pm, John Machin <sjmac... at lexicon.net> wrote:
>   
>> On Jul 18, 9:05 pm, oj <ojee... at gmail.com> wrote:
>>
>>
>>
>>     
>>> On Jul 18, 11:33 am, arnimavidyar... at gmail.com wrote:
>>>       
>>>> Hi,
>>>>         
>>>> Hi,
>>>>         
>>>> I am taking a string as an input from the user and it should only
>>>> contain the chars:L , M or R
>>>>         
>>>> I tried the folllowing in kodos but they are still not perfect:
>>>>         
>>>> [^A-K,^N-Q,^S-Z,^0-9]
>>>> [L][M][R]
>>>> [LRM]?L?[LRM]? etc but they do not exactly meet what I need.
>>>>         
>>>> For eg: LRLRLRLRLM is ok but LRLRLRNL is not as it has 'N' .like that.
>>>>         
>>>> regards,
>>>> SZ
>>>>         
>>>> The string may or may not have all the three chars.
>>>>         
>>> With regular expressions, [^LRM] matches a character that isn't L, R
>>> or M. So:
>>>       
>>> import re
>>>       
>>> var = "LRLRLRLNR"
>>>       
>>> if re.search(r'[^LRM]', var):
>>>     print "Invalid"
>>>       
>> Fails if var refers to the empty string.
>>     
>
> No it doesn't, it succeeds if var is an empty string. An empty string
> doesn't contain characters that are not L, R or M.
>
> The OP doesn't specify whether an empty string is valid or not. My
> interpretation was that an empty string would be valid.
>   
Why not just use * instead of + like:

if re.search(r'^[^LRM]*$', var): # note: ^ outside [] is start of string; $ means end of string
    print "Invalid"

This will *only* print invalid when there is a character other than L, R, or M or a empty string.






More information about the Python-list mailing list