import re

module_possible_first_characters = '\\w'  # todo write tests for another symbols !#\$%&'\(\)\+,-\.=@\[\]\^`{}~
module_possible_last_characters = module_possible_first_characters
module_possible_characters = module_possible_first_characters + '\\. -'

exclamation_syntax_regex_str = f"(?P<module>[{module_possible_first_characters}][{module_possible_characters}]*" \
                               f"(?:[{module_possible_last_characters}])?)!" \
                               f"(?P<expr>(?:[\\w]+::)*(\\w+))"
curly_syntax_regex_str = "\\{,,(?P<module>[^}]+)\\}" \
                         "(?P<expr>(?:[\\w]+::)*(\\w+))"

curly_syntax_regex = re.compile(curly_syntax_regex_str)
exclamation_syntax_regex = re.compile(exclamation_syntax_regex_str)
