import re
regex = re.compile(r"^(([1-9]\d{0,2}((,\d{3})*|(\d{3})*))|0?)(\.\d+)?$", flags=re.MULTILINE)
test_str = ("Capture the following numbers\n"
"1\n"
"0\n"
"1223\n"
"332243243423243243243423423243\n"
"12\n"
"1000000000\n"
"111,000,000\n"
"1000.000398\n"
"1,123,333.2222222\n"
"1.22222222\n"
"1,234,345,673,345,345,345.123455\n"
"1222222222\n\n"
"0.123345\n\n"
".1234\n"
"012,312\n"
".12332\n"
"1000.122.122\n"
"1,231,423,434.3746472773640000000000\n"
"Don't Capture:\n"
"2000..0000\n\n"
",111.45\n\n"
"start of line\n"
"#first is 1 - 3 digits\n"
" # can't start with zero \n"
" # unless the zero is followed by a period\n"
"#then optional (optional comma then 3 digits)\n"
"#then optional (period then unlimited digits) \n"
"end of line\n\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html