Здесь я делаю (рискованное) предположение, что в ваших текстах всегда будет подстрока Error Code
.Поэтому я изменил ваше регулярное выражение на '^\[(\d+),([0-9:]+)\]\s+(.+)\s+(Error\sCode:.+)$'
.Выполнение этого в оболочке:
>>> import re
>>> text = '[1,12:12] call basic_while1() Error Code: 1046. No database selected'
('1', '12:12', 'call basic_while1() Error Code: 1046. No database selected')
>>> re.match('^\[(\d+),([0-9:]+)\]\s+(.+)\s+(Error\sCode:.+)$', text)
<re.Match object; span=(0, 68), match='[1,12:12] call basic_while1() Error Code: 1046. N>
>>> _.groups()
('1', '12:12', 'call basic_while1()', 'Error Code: 1046. No database selected')
Если вам нужен список, просто используйте приведение типа.
>>> list(_)
['1', '12:12', 'call basic_while1()', 'Error Code: 1046. No database selected']
Примечание: _
в приведенном вышекоманда - это ярлык, указывающий оболочке Python повторно использовать предыдущий результат (в данном случае объект re.Match
, а затем результат groups()
).
Всего:
matches = re.match('^\[(\d+),([0-9:]+)\]\s+(.+)\s+(Error\sCode:.+)$', text)
if matches is not None: # if there is no match, re.match returns None
print(list(matches.groups()))
и что такое регулярное выражение, если я хочу получить вывод вроде ['Error Code: 1046. No database selected']
Вы можете просто проиндексировать последний элемент списка, используя [-1]
, а затем заключить его в скобки, чтобысоставить список.
print([matches.groups()[-1]]) # output => ['Error Code: 1046. No database selected']