^start of line
\(?optionally matches the literal ( (4010 / 508 / 2816)
.*?any Unicode character (except for line terminators), repeated any number of times
Group qno(?P<qno>\d{1,2}) \d{1,2}a Unicode decimal digit, repeated between 1 and 2 times
\)the literal ) (4110 / 518 / 2916)
\.the literal . (4610 / 568 / 2E16)
\s?optionally matches a Unicode whitespace character
\s?optionally matches a Unicode whitespace character
Athe literal text A (case insensitive) \.?optionally matches the literal . (4610 / 568 / 2E16)
\s?optionally matches a Unicode whitespace character
.+?any Unicode character (except for line terminators), repeated at least once
\s+a Unicode whitespace character, repeated at least once
Bthe literal text B (case insensitive) \.?optionally matches the literal . (4610 / 568 / 2E16)
\s?optionally matches a Unicode whitespace character
.+?any Unicode character (except for line terminators), repeated at least once
\s+a Unicode whitespace character, repeated at least once
Cthe literal text C (case insensitive) \.?optionally matches the literal . (4610 / 568 / 2E16)
\s?optionally matches a Unicode whitespace character
.+?any Unicode character (except for line terminators), repeated at least once
\s+a Unicode whitespace character, repeated at least once
Dthe literal text D (case insensitive) \.?optionally matches the literal . (4610 / 568 / 2E16)
\s?optionally matches a Unicode whitespace character
.+any Unicode character (except for line terminators), repeated at least once
$end of line
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string
x modifier: extended. Ignores unescaped whitespace and comments outside character classes
i modifier: insensitive. Matches without distinguishing uppercase and lowercase letters