Ok, I see what's going on... from the docs:
If one or more groups are present in the pattern, return a list of groups;
this will be a list of tuples if the pattern has more than one group.
As it turns out, you do have a group, "(d+,?)"... so, what it's returning is the last occurrence of this group, or 000.
One solution is to surround the entire regex by a group, like this
regex = re.compile('((d+,?)+)')
then, it will return [('9,000,000', '000')], which is a tuple containing both matched groups. of course, you only care about the first one.
Personally, i would use the following regex
regex = re.compile('((d+,)*d+)')
to avoid matching stuff like " this is a bad number 9,123,"
Edit.
Here's a way to avoid having to surround the expression by parenthesis or deal with tuples
s = "..."
regex = re.compile('(d+,?)+')
it = re.finditer(regex, s)
for match in it:
print match.group(0)
finditer returns an iterator that you can use to access all the matches found. these match objects are the same that re.search returns, so group(0) returns the result you expect.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…