Парсинг текста с таблицей в словарь

Мне нужно распарсить текст в ключ:значение, и чтобы это было универсально, если текст будет меняться, правильно и лучше сделать через регулярку, но я не особо в ней разбираюсь, и прошу помощи тут. Вот пример возможного текста (получается путем 'show variables like '%password%';' в sql). Я и сам почти смог сделать, но не могу пустые значения никак учесть

+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| server_audit_events           | CONNECT,QUERY,TABLE   |
| server_audit_excl_users       |                       |
| server_audit_file_path        | server_audit.log      |
| server_audit_file_rotate_now  | OFF                   |
| server_audit_file_rotate_size | 1000000               |
| server_audit_file_rotations   | 9                     |
| server_audit_incl_users       |                       |
| server_audit_logging          | ON                    |
| server_audit_mode             | 0                     |
| server_audit_output_type      | file                  |
| server_audit_query_log_limit  | 1024                  |
| server_audit_syslog_facility  | LOG_USER              |
| server_audit_syslog_ident     | mysql-server_auditing |
| server_audit_syslog_info      |                       |
| server_audit_syslog_priority  | LOG_INFO              |
+-------------------------------+-----------------------+

Пытался сделать вот так, и по списку сделать словарь, но теряется пустое значение, и вот сижу думаю, никак не придумаю

введите сюда описание изображения


Ответы (2 шт):

Автор решения: strawdog

не понятно, зачем вам регулярка, если можно просто сплитить:

d = dict()
for i in info.split("\n"):
    if not "+--" in i and len(i):
        res = i.split("|")
        d[res[1].strip()] = res[2].strip()

правда, заголовок попадает в словарь тоже, но с этим, думаю, вы разберетесь. d:

{'Variable_name': 'Value', 'validate_password.check_user_name': 'ON', 'validate_password.dictionary_file': '', 'validate_password.length': '8', 'validate_password.mixed_case_count': '1', 'validate_password.number_count': '1', 'validate_password.policy': 'MEDIUM', 'validate_password.special_char_count': '1'}
→ Ссылка
Автор решения: SergFSM

потестируйте такую регулярку:

from re import findall

dict(findall(r'\| (.+?)\s*\| (.+?)\s*\|',text))

>>> out
{'Variable_name': 'Value',
 'server_audit_events': 'CONNECT,QUERY,TABLE',
 'server_audit_excl_users': ' ',
 'server_audit_file_path': 'server_audit.log',
 'server_audit_file_rotate_now': 'OFF',
 'server_audit_file_rotate_size': '1000000',
 'server_audit_file_rotations': '9',
 'server_audit_incl_users': ' ',
 'server_audit_logging': 'ON',
 'server_audit_mode': '0',
 'server_audit_output_type': 'file',
 'server_audit_query_log_limit': '1024',
 'server_audit_syslog_facility': 'LOG_USER',
 'server_audit_syslog_ident': 'mysql-server_auditing',
 'server_audit_syslog_info': ' ',
 'server_audit_syslog_priority': 'LOG_INFO'}
→ Ссылка