Maximum Number Regular Expression
6
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)
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






There are currently no comments for this snippet.