import re
regex = r"^(\d{1,3}\.?(?:\d{1,3}\.?)*)? ?([^\W\d]+)"
s = ("section\n"
"1 section\n"
"2. section\n"
"2.1 subsection\n"
"2.1.1 subsection\n"
"2.1.1. subsection")
print(re.findall(regex, s, re.MULTILINE))
aW1wb3J0IHJlCgpyZWdleCA9IHIiXihcZHsxLDN9XC4/KD86XGR7MSwzfVwuPykqKT8gPyhbXlxXXGRdKykiCgpzID0gKCJzZWN0aW9uXG4iCgkiMSBzZWN0aW9uXG4iCgkiMi4gc2VjdGlvblxuIgoJIjIuMSBzdWJzZWN0aW9uXG4iCgkiMi4xLjEgc3Vic2VjdGlvblxuIgoJIjIuMS4xLiBzdWJzZWN0aW9uIikKCnByaW50KHJlLmZpbmRhbGwocmVnZXgsIHMsIHJlLk1VTFRJTElORSkp
[('', 'section'), ('1', 'section'), ('2.', 'section'), ('2.1', 'subsection'), ('2.1.1', 'subsection'), ('2.1.1.', 'subsection')]