The re module defines several flags that affect the compilation of a pattern string. For instance, re.I == re.IGNORECASE results in case-insensitive matching.

But what if you want part of a pattern to be case sensitive and part not? For instance, the IDLE colorizer needs to match keywords and builtin names with their exact case: 'if' is a keywork, 'If', 'iF', and 'IF' are not. However, case does not matter string prefixes: 'fr', 'fR', 'Fr', and 'FR' are all the same to the tokenizer. So the string prefix part of the colorize pattern was recently upgraded to

r"(\br|R|u|U|f|F|fr|Fr|fR|FR|rf|rF|Rf|RF|b|B|br|Br|bR|BR|rb|rB|Rb|RB)?"

3.6 added syntax for 'local flags'.
'''
(?imsx-imsx:...)

(Zero or more letters from the set 'i', 'm', 's', 'x', optionally followed by '-' followed by one or more letters from the same set.) The letters set or removes the corresponding flags: re.I (ignore case), re.M (multi-line), re.S (dot matches all), and re.X (verbose), for the part of the expression. (The flags are described in Module Contents.)
'''
Here is the replacement for the above, curtesy of Serhiy Storchaka.

r"(?i:\br|u|f|fr|rf|b|br|rb)?"

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to