我正在尝试将单个字符串分成不同的行。
我有以下单行字符串:
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定义每个项目。但是,我无法成功,因为每个名称的单词长度都不同,并且可能包含或不包含空格或破折号。同样,第一个浮点数与低谷下划线相连。我的大脑超负荷 现在,我的目标是让每个有成绩的人都在新的一行上,这样我就可以选择姓名和成绩:
答案 0 :(得分:3)
您可以使用提供模式匹配的正则表达式。 '[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