Предизвикателства > Регекс за Дядо Коледа > Решения > Решението на Камен Колев

Резултати
1 точки от тестове
1 точки от учител

2 точки общо

2 успешни теста
1 неуспешни теста
Код
Скрий всички коментари

 1import re
 2
 3def parse_wishlist(input_str):
 4    pattern = r'\((\d+(?:\.\d*)?)\)\s*(.*?)\s*\[(\d+)[^\d]*\]\s*(.*?)(?=\((\d+(?:\.\d*)?)\)|\Z)'
 5    result = []
 6    matches = re.finditer(pattern, input_str, re.DOTALL)
 7    for match in matches:
 8        coefficient = float(match.group(1))
 9        name = match.group(2).strip()
10        age = int(match.group(3))
11        wishes_str = match.group(4)
12        wishes_matches = re.findall(r'[-*](.*)', wishes_str)
13        wishes = [w.strip() for w in wishes_matches if w not in ' ']
14        result.append((coefficient, name, age, tuple(wishes)))
15    return result

F..
======================================================================
FAIL: test_full (test.TestRegex)
A single test to rule them all.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 121, in test_full
self.assertEqual(converted, parse_wishlist(modified_example))
AssertionError: Lists differ: [('3.14', 'Иван Иванов', '10', ('Плейстейша[110 chars]',))] != [(3.14, 'Иван Иванов', 10, ('Плейстейшан', [102 chars]',))]

First differing element 0:
('3.14', 'Иван Иванов', '10', ('Плейстейша[34 chars]че'))
(3.14, 'Иван Иванов', 10, ('Плейстейшан', [30 chars]че'))

- [('3.14',
- 'Иван Иванов',
- '10',
- ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
? ^

+ [(3.14, 'Иван Иванов', 10, ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
? ^^^^^^^^^^^^^^^^^^^^^^^^^^

- ('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))]
? - - - -

+ (1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',))]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/tmp/test.py", line 123, in test_full
self.assertEqual(expected_full, parse_wishlist(full))
AssertionError: Lists differ: [(3.1[137 chars]taj',)), (6.9, 'Mr. D-r', 999, ('[Doctor stuff[341 chars]м'))] != [(3.1[137 chars]taj', 'r [ 999 ]', '[Doctor stuff] Скалпел', '[330 chars]м'))]

First differing element 1:
(1.94[57 chars]taj',))
(1.94[57 chars]taj', 'r [ 999 ]', '[Doctor stuff] Скалпел', '[64 chars]пе'))

First list contains 1 additional elements.
First extra element 4:
(99.9534412345, 'На мама сладкото ангелче', 3, ('Най-хубавото дървено конче (размер 1.5)', 'Най-страхотното лего (тамън отвориха лицензиран магазин)', 'Хлороформ'))

[(3.14, 'Иван Иванов', 10, ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- (1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',)),
- (6.9,
? ^

+ (1.94,
? ^ +

- 'Mr. D-r',
- 999,
+ 'Georgi "Jorkata" Georgiev',
+ 43,
+ ('Vancheto ot tretiq etaj',
+ 'r [ 999 ]',
- ('[Doctor stuff] Скалпел',
? ^

+ '[Doctor stuff] Скалпел',
? ^

'[Doctor stuff] Мехлем за дупе',
'[Non-doctor stuff] Мехлем за дупе')),
- (1,
+ (1.0,
? ++

'Gospodin (he/him) Mitko',
12,
('1', '2', '3', '4', 'Malko mi pisva da go pisha toq test')),
(99.9534412345,
'На мама сладкото ангелче',
3,
('Най-хубавото дървено конче (размер 1.5)',
'Най-страхотното лего (тамън отвориха лицензиран магазин)',
'Хлороформ'))]

----------------------------------------------------------------------
Ran 3 tests in 0.004s

FAILED (failures=1)

Дискусия
История
Това решение има само една версия.