Maximum Number Regular Expression





6
Date Submitted Sun. May. 27th, 2007 11:14 AM
Revision 1 of 1
Beginner kvj86210
Tags python
Comments 0 comments
Create a regular expression pattern matching any positive number that is less than or equal to the given max number

Example:

pattern = createRegExNumberPattern( 950 )

print pattern

([0-8]\d\d)|(9[0-4]\d)|(950)


import string

#
# Create a regular expression pattern matching any
# positive number that can be parsed that is
# less than or equal to the given max number
#
def createRegExNumberPattern( maxNum ):

        maxStr = str( maxNum )

        fixedNumbers = ''
        groups = []

        # Iterate over the digits in the max number and produce a group
        # from each digit that represents all numbers up to and not including
        # the number the current digit represents
        for i in range( len( maxStr ) ):
       
                digit = maxStr[i]

                if i >= 1:
                        fixedNumbers += maxStr[i-1]

                # the rest are zeros so there are no more groups to produce
                if int( maxStr[ i: ] ) == 0:
                        break

                if digit != '0':
                        numericSet = '0'
                        lastDigit = int(digit)-1
                        if lastDigit != 0:
                                numericSet += '-' + str( lastDigit )

                        if len( numericSet ) > 1:
                                numericSet = '[' + numericSet + ']'

                        numberOfFullNumbers = len(maxStr)-i-1
                        regExGroup = fixedNumbers + numericSet + '\d' * numberOfFullNumbers
                        justTheRange = len( fixedNumbers ) == 0 and numberOfFullNumbers == 0
                        if len( regExGroup ) > 1 and not justTheRange:
                                regExGroup = '(' + regExGroup + ')'

                        groups.append( regExGroup )

        if len( maxStr ) > 1:
                maxStr = '(' + maxStr + ')'

        groups.append( maxStr )

        return '|'.join( groups )

pattern = createRegExNumberPattern( 950 )

print pattern

 

Corey Stewart

cdstewart.blogspot.com

Comments

There are currently no comments for this snippet.

Voting