4040
4141DEBUG = False
4242
43- def sint (s ):
44- if s .startswith ("0o" ):
45- return int (s [2 :], 8 )
46- elif s .startswith ("0x" ):
47- return int (s [2 :], 16 )
48- else :
49- return int (s )
50-
5143# As you can probably see it is relatively easy to add more format types.
5244# Make sure you add a second entry for each new item that adds the extra
5345# few characters needed to handle the field ommision.
@@ -68,32 +60,26 @@ def sint(s):
6860 (r"%\[([^\]]+)\]" , r"([%s]+)" , lambda x :x ),
6961 (r"%\*\[([^\]]+)\]" , r"(?:[%s]+)" , None ),
7062
71- (r"%l?[dil]" , r"([+-]?(?:0o[0-7]+|0x[\da-fA-F]+|\d+))" , sint ),
72- (r"%\*l?[dil]" , r"(?:[+-]?0o[0-7]+|0x[\da-fA-F]+|\d+)" , None ),
73-
74- (r"%(\d+)l?[dil]" , r"([+-]?(?:0o[0-7]+|0x[\da-fA-F]+|\d+)" , sint ),
75- (r"%\*(\d+)l?[dil]" , r"(?:[+-]?(?:0o[0-7]+|0x[\da-fA-F]+|\d+)" , None ),
76-
77- (r"%l?u" , r"(\d+)" , int ),
78- (r"%\*l?u" , r"(?:\d+)" , None ),
63+ (r"%l?d" , r"([+-]?\d+)" , int ),
64+ (r"%\*l?d" , r"(?:[+-]?\d+)" , None ),
7965
80- (r"%(\d+)l?u " , r"(\d{1,%s})" , int ),
81- (r"%\*(\d+)l?u " , r"(?:\d{1,%s})" , None ),
66+ (r"%(\d+)l?d " , r"([+-]? \d{1,%s})" , int ),
67+ (r"%\*(\d+)l?d " , r"(?:[+-]? \d{1,%s})" , None ),
8268
83- (r"%[fgeE ]" , r"([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , float ),
84- (r"%\*[fgeE ]" , r"(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , None ),
69+ (r"%[fge ]" , r"([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , float ),
70+ (r"%\*[fge ]" , r"(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , None ),
8571
86- (r"%(\d+)[fgeE ]" , r"([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , float ),
87- (r"%\*(\d+)[fgeE ]" , r"(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , None ),
72+ (r"%(\d+)[fge ]" , r"([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , float ),
73+ (r"%\*(\d+)[fge ]" , r"(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)" , None ),
8874
89- (r"%l?[xX] " , r"((?:0[xX])? [\dA-Za-f]+)" , lambda x : int (x , 16 )),
90- (r"%\*l?[xX] " , r"(?:(?:0[xX])? [\dA-Za-f]+)" , None ),
75+ (r"%l?x " , r"([\dA-Za-f]+)" , lambda x : int (x , 16 )),
76+ (r"%\*l?x " , r"[\dA-Za-f]+)" , None ),
9177
92- (r"%(\d+)l?[xX] " , r"((?:0[xX])? [\dA-Za-f]{1,%s})" , lambda x : int (x , 16 )),
93- (r"%\*(\d+)l?[xX] " , r"(?:(?:0[xX])? [\dA-Za-f]{1,%s})" , None ),
78+ (r"%(\d+)l?x " , r"([\dA-Za-f]{1,%s})" , lambda x : int (x , 16 )),
79+ (r"%\*(\d+)l?x " , r"[\dA-Za-f]{1,%s})" , None ),
9480
95- (r"%l?o" , r"([0-7]* )" , lambda x :int (x , 8 )),
96- (r"%\*l?o" , r"(?:[0-7]* )" , None ),
81+ (r"%l?o" , r"([0-7]+ )" , lambda x :int (x , 8 )),
82+ (r"%\*l?o" , r"(?:[0-7]+ )" , None ),
9783
9884 (r"%(\d+)l?o" , r"([0-7]{1,%s})" , lambda x : int (x , 8 )),
9985 (r"%\*(\d+)l?o" , r"(?:[0-7]{1,%s})" , None ),
@@ -161,11 +147,10 @@ def scanf(format, s=None, collapseWhitespace=True):
161147 %c Fixed width character string.
162148 %s String of non-whitespace characters with leading
163149 whitespace skipped.
164- %d, %i, %l Signed integer (leading 0 => octal, 0x => hex).
150+ %d Signed integer
165151 %o Octal integer.
166- %u Unsigned integer.
167152 %x Hexadecimal integer.
168- %f, %g, %e Python float
153+ %f, %g, %e Float
169154 %[] Character scan set
170155
171156 scanf.scanf returns a tuple of found values or None if the format
0 commit comments