Разделение строки на новой строке после третьего числа - Python - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь получить одну строку, разбитую на разные строки.

У меня есть следующая строка из одной строки:

h = 
John_______________7.3 7.9 9.7 Peter-Pan__________5.1 6.3 6.6 
Steve Stevenson____5.1 5.3 5.5 Johnny Palmer______8.3 8.8 9.2 
Randy______________8.0 8.0 8.0

И я пытаюсь получить этот вывод:

h = 
John_______________7.3 7.9 9.7 
Peter-Pan__________5.1 6.3 6.6 
Steve Stevenson____5.1 5.3 5.5 
Johnny Palmer______8.3 8.8 9.2
Randy______________8.0 8.0 8.0

Where when i select h[0] the output should be:
John
Peter-Pan
Steve Stevenson
Johnny Palmer
Randy

Я уже написал код для работы с информацией, если она в вышеуказанном формате, я часами пробовал много разных вещей, но не смог добиться успеха.Это позволило мне попытаться написать новый код для работы с информацией, как сейчас.

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

В коде я пытаюсь разбить строку на каждое имя и три числа с плавающей точкой подряд.Мой текущий код сейчас, хотя и отличается от многих других попыток, изолирует каждые три оценки в одном элементе в списке и выделяет имена как отдельные элементы, но разделяет имена там, где они не должны.Я не могу использовать iter, map и zip снова, так как они различны для каждого имени:

replacechar = h.replace(' ', '_')
student_list = replacechar.split('_')
isolated_grades = [item for item in student_list if 
                   item.strip('abcdefghijklmnopqrstuvwxyz_-0123456789') == '.']
isolated_names = [item for item in student_list if not 
                  item.strip('abcdefghijklmnopqrstuvwxyz_-0123456789') == '.']
isolated_names2 = ' '.join(isolated_names)
isolated_names3 = isolated_names2.split()
i = iter(isolated_grades)
f = map(" ".join, zip(i, i, i))

Я попытался разделить на разделители, такие как пробелы или '_'.Я попытался заменить символы для разделения и попытался определить каждый элемент на основе .isalpha или .isdigit.Однако я не могу добиться успеха, так как каждое имя имеет разную длину слов и может содержать или не содержать пробелы или тире.Также первый поплавок связан с подчеркиванием имени корыта.Мой мозг перегружен. Сейчас моя цель - вывести каждого человека с оценками на новую строку, которая позволила бы мне выбирать имена и оценки:

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать регулярные выражения, которые обеспечивают сопоставление с образцом.Регулярное выражение '[A-Za-z -]+_+[0-9. ]+' должно соответствовать названию, символу подчеркивания и шаблону.Затем re.findall('[A-Za-z -]+_+[0-9. ]+', string) вернет список строк.Вы можете объединить это обратно в строку, разделенную символом новой строки, с помощью '\n'.join(list_of_results).

документации по регулярным выражениям Python: https://docs.python.org/3/library/re.html

...