first, regex part: I am new to regexes and have come up with the following expression: ((1[0-4]|[1-9]),(1[0-4]|[1-9])/){5}(1[0-4]|[1-9]),(1[0-4]|[1-9])
to exactly match strings which look like this: 1,2/3,4/5,6/7,8/9,10/11,12 i.e. 6 comma-delimited pairs of integer numbers separated by the backslash character + constraint that numbers must be in range 1-14. i should add that i am only interested in finding exact matches (doing some kind of command line validation). this seems to work fine, although i would welcome any advice about how to shorten the above. it seems to me that there should exist some shorthand for (1[0-4]|[1-9]) once i have defined it once? also (and this is where my total beginner status brings me here looking for help :)) i would like to add one more constraint to the above regex. i want to match strings *iff* each pair of numbers are different. e.g: 1,1/3,4/5,6/7,8/9,10/11,12 or 1,2/3,4/5,6/7,8/9,10/12,12 should fail to be matched by my final regex whereas 1,2/3,4/5,6/7,8/9,10/11,12 should match OK. any tips would be much appreciated - especially regarding preceding paragraph! and now for the python part: results = "1,2/3,4/5,6/7,8/9,10/11,12" match = re.match("((1[0-4]|[1-9]),(1[0-4]|[1-9])/){5}(1[0-4]|[1-9]), (1[0-4]|[1-9])", results) if match == None or match.group(0) != results: raise FormatError("Error in format of input string: %s" % (results)) results = [leg.split(',') for leg in results.split('/')] # => [['1', '2'], ['3', '4'], ['5', '6'], ['7', '8'], ['9', '10'], ['11', '12']] . . . the idea in the above code being that i want to use the regex match as a test of whether or not the input string (results) is correctly formatted. if the string results is not exactly matched by the regex, i want my program to barf an exception and bail out. apart from whether or not the regex is good idiom, is my approach suitably pythonic? TIA for any help here. -- http://mail.python.org/mailman/listinfo/python-list