Я пишу что-то вроде парсера для маленькой библиотеки.
Моя строка имеет следующий формат:
text = "Louis,Edward,John|85.56!26,Billy,Don!18|78.0,Dean"
Просто чтобы быть более понятным, это список людей имен , разделенных запятыми и сопровождаемых двумя дополнительными разделителями ( | и ! ), после первого стоит weight , то есть number с 0-2 десятичными знаками, в то время как после "!" есть целое число, представляющее возраст. Разделители и связанные значения могут отображаться в любом порядке, как вы можете видеть для John и для Don .
Мне нужно извлечь с помощью Regex (я знаю, что мог бы сделать это многими другими способами) все имена длиной от 2 до 4 и два разделителя и следующие значения, если они присутствуют.
Это мой ожидаемый результат :
[('John', '|85.56', '!26'), ('Don', '|78.00' ,'!18'), ('Dean', '', '')]
Я пытаюсь с этим кодом:
import re
text = "Louis,Edward,John|85.56!26,Billy,Don!18|78.0,Dean"
pattern = re.compile(r'(\b\w{2,4}\b)(\!\d+)?(\|\d+(?:\.\d{1,2})?)?')
search_result = pattern.findall(text)
print(search_result)
Но это фактический результат:
[('John', '', '|85.56'), ('26', '', ''), ('Don', '!18', '|78.0'), ('Dean', '', '')]