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

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

2 точки общо

3 успешни теста
0 неуспешни теста
Код (Forgot to conver to int)

 1import re
 2
 3def parse_wishlist(raw_data):
 4    regex = r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))'
 5    raw_parsed_data = re.findall(regex, raw_data)
 6    parsed_data = []
 7    for entry in raw_parsed_data:
 8        niceness, name, age, wishlist = entry
 9        wishlist = tuple(re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', wishlist, re.M))
10        parsed_data.append((float(niceness), name, float(age), wishlist))
11    return parsed_data
12
13# Alternatively, we can always do this:
14# [(float(match[0], match[1], float(match[2], re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', match[3], re.M)) for match in re.findall(r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))', s)]

...
----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

Дискусия
История

f1import ref1import re
22
3def parse_wishlist(raw_data):3def parse_wishlist(raw_data):
4    regex = r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))'4    regex = r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))'
5    raw_parsed_data = re.findall(regex, raw_data)5    raw_parsed_data = re.findall(regex, raw_data)
6    parsed_data = []6    parsed_data = []
7    for entry in raw_parsed_data:7    for entry in raw_parsed_data:
8        niceness, name, age, wishlist = entry8        niceness, name, age, wishlist = entry
9        wishlist = tuple(re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', wishlist, re.M))9        wishlist = tuple(re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', wishlist, re.M))
n10        parsed_data.append((niceness, name, age, wishlist))n10        parsed_data.append((float(niceness), name, float(age), wishlist))
11    return parsed_data11    return parsed_data
1212
13# Alternatively, we can always do this:13# Alternatively, we can always do this:
t14# [match[:3] + (re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', match[3], re.M), ) for match in re.findall(r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))', s)]t14# [(float(match[0], match[1], float(match[2], re.findall(r'^[\t\f ]*[\-\*][\t\f ]*(.+)[\t\f ]*', match[3], re.M)) for match in re.findall(r'\(\s*([\d\.]+)\s*\)\s*([^\[\]]+?)\s*\[\s*(\d+).*\]((?:\n|.)+?)(?=(?:\n\(|$))', s)]
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op