import re
regex = re.compile(r"^(?!\s*$)\s*(?!\s)([^#\n\[=]+?)\s*?(?>#.*?$|(?>=\s*$|=\s*?(?:#?|(\".*?\"|[^\s].*?)\s*?)(?:\s*#.*?$)*?$)?$)", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("[mysqld]\n"
"skip-grant-tables # k\n"
"bind-address=127.0.0.1\n"
" port = 3307 # test \n"
"basedir=C:\\Program Files (x86)\\MySQL\\ \n"
"datadir=C:\\Program Files (x86)\\MySQL\\data\\\n\n"
"default-storage-engine=INNODB \n\n"
"sql-mode= \" STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,test NO_ENGINE_SUBSTITUTION\" #test\n\n"
"max_connections=1000\n\n"
"tmp_table_size=1G\n"
"max_heap_table_size=1G\n"
"join_buffer_size=1M \n"
"query_cache_size =50M\n"
"query_cache_limit=50M\n"
"max_allowed_packet = 104857600\n"
"port =\n\n"
" = fh\n"
"thread_cache_size=8\n\n"
"#*** MyISAM Specific options\n\n"
"myisam_max_sort_file_size=100G\n"
"myisam_sort_buffer_size=35M\n"
"key_buffer_size=25M\n"
"read_buffer_size=64K\n"
"read_rnd_buffer_size=256K\n"
"sort_buffer_size=256K\n\n"
"#*** INNODB Specific options ***\n\n"
"innodb_flush_log_at_trx_commit=0\n"
"innodb_log_buffer_size=50M\n"
"innodb_buffer_pool_size=1000M\n"
"innodb_log_file_size=300M\n"
"innodb_thread_concurrency=8\n"
"innodb_flush_method=normal\n"
"innodb_autoinc_lock_mode=0 \n\n\n"
"test=0\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html