import re
examples = [
"D1", # expected: ('1')
"D1sjdgf", # ('1')
"D1.2", # ('1', '2')
"D1.2.3", # ('1', '2', '3')
"D3.10.3x", # ('3', '10', '3')
"D3.10.11" # ('3', '10', '11')
]
rx = re.compile(r'^D(\d+)(?:\.(\d+)(?:\.(\d+))?)?')
for s in examples:
result = rx.search(s)
print(s, result.groups())
aW1wb3J0IHJlCgpleGFtcGxlcyA9IFsKICAgICJEMSIsICAgICAgICMgZXhwZWN0ZWQ6ICgnMScpCiAgICAiRDFzamRnZiIsICAjICgnMScpCiAgICAiRDEuMiIsICAgICAjICgnMScsICcyJykKICAgICJEMS4yLjMiLCAgICMgKCcxJywgJzInLCAnMycpCiAgICAiRDMuMTAuM3giLCAjICgnMycsICcxMCcsICczJykKICAgICJEMy4xMC4xMSIgICMgKCczJywgJzEwJywgJzExJykKXQoKcnggPSByZS5jb21waWxlKHInXkQoXGQrKSg/OlwuKFxkKykoPzpcLihcZCspKT8pPycpCgpmb3IgcyBpbiBleGFtcGxlczoKICAgIHJlc3VsdCA9IHJ4LnNlYXJjaChzKQogICAgcHJpbnQocywgcmVzdWx0Lmdyb3VwcygpKQo=
D1 ('1', None, None)
D1sjdgf ('1', None, None)
D1.2 ('1', '2', None)
D1.2.3 ('1', '2', '3')
D3.10.3x ('3', '10', '3')
D3.10.11 ('3', '10', '11')