Team A Team B
name xyz abc
addres 345,JH colony 43,JK colony
Phone 76576 87866
name pqr ijk
addres 345,ab colony 43,JKkk colony
Phone 7666666 873336
在上面,我有2个球队,每个球员的姓名,地址和电话号码列在列表中。但是,没有这样的表,但是我尝试读取的数据格式为表格格式,其中在A团队中,B团队是第二列和第三列,而第一列是标签名称,地址电话所在的位置。 我的目标是仅获取按球队名称分组的球员的姓名。在此示例中,每个团队有2名球员。它可以介于1到2之间。有人可以使用正则表达式来帮助共享解决方案吗?我尝试了一下,但这给了我随机的结果,例如A队中的B队球员。有人可以帮忙吗?
答案 0 :(得分:0)
这应该对您有用,将来我会在您输入的字符串上提供更多详细信息,因为我假设有空格。如果它使用制表符,请尝试用四个空格替换它们。我添加了额外的一行,其中包括一个更困难的案例。
警告:如果B队比A队拥有更多的球员,则可能会将多余的球员归入A队。但这将取决于确切的格式。
import re
pdf_string = ''' Team A Team B
name xyz abc
addres 345,JH colony 43,JK colony
Phone 76576 87866
name pqr ijk
addres 345,ab colony 43,JKkk colony
Phone 7666666 873336
name forename surname
addres 345,ab colony
Phone 7666666 '''
lines_untrimmed = pdf_string.split('\n')
lines = [line.strip() for line in lines_untrimmed]
space_string = ' ' * 3 # 3 spaces to allow spaces between names and teams
# This can be performed as a one liner below, but I wrote it out for an explanation
lines_csv = []
for line in lines:
line_comma_spaced = re.sub(space_string + '+', ',', line)
line_item_list = line_comma_spaced.split(',')
lines_csv.append(line_item_list)
# lines_csv = [re.sub(space_string + '+', ',', line).split(',') for line in lines]
teams = lines_csv[0]
team_dict = {team:[] for team in teams}
for line in lines_csv:
if 'name' in line:
line_abbv = line[1:] # [1:] to remove name
for i, team in enumerate(teams):
if i < len(line_abbv): # this will prevent an error if there are fewer names than teams
team_dict[team].append(line_abbv[i])
print(team_dict)
这将给出输出:
{'Team A': ['xyz', 'pqr', 'forename surname'], 'Team B': ['abc', 'ijk', 'ijk']}