Regex 需要从python列表中提取表格格式的数据

Regex 需要从python列表中提取表格格式的数据,regex,python-3.x,Regex,Python 3.x,在上面,我有两支球队,名单上有每个球员的姓名、地址和电话号码。然而,没有这样的表格,但我试图读取的数据是表格格式的,其中A组B组是第2列和第3列,第1列是标签名称、地址和电话的位置。 我的目标是只获取按球队名称分组的球员的姓名。在本例中,每队有2名球员。它可以介于1和2之间。是否有人可以帮助共享使用正则表达式的解决方案。我尝试了一点,但是这会给我随机的结果,比如a队中的B队球员。有人能帮忙吗?这应该对你有用,以后我会给你更多关于输入字符串的细节,我假设了空格。如果它使用制表符,请尝试将其替换为四

在上面,我有两支球队,名单上有每个球员的姓名、地址和电话号码。然而,没有这样的表格,但我试图读取的数据是表格格式的,其中A组B组是第2列和第3列,第1列是标签名称、地址和电话的位置。
我的目标是只获取按球队名称分组的球员的姓名。在本例中,每队有2名球员。它可以介于1和2之间。是否有人可以帮助共享使用正则表达式的解决方案。我尝试了一点,但是这会给我随机的结果,比如a队中的B队球员。有人能帮忙吗?

这应该对你有用,以后我会给你更多关于输入字符串的细节,我假设了空格。如果它使用制表符,请尝试将其替换为四个空格。我增加了一行,其中包括一个更难的案例

警告:如果B队的球员比A队多,可能会将额外的球员加入A队。但这取决于确切的格式

                           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

我认为您需要更具体地说明如何接收这些数据。你用表格的形式描述它,但我不太清楚。它是从一根长绳子里来的吗?在问题标题中,您描述了来自python列表的数据,这些数据是什么样子的?也许你可以发布你正在使用的代码来阐明这一点。上面是它在文档中的外观。在我尝试将其转换为列表后,它是随机的,我遇到了我提到的问题@VectorVictors文档是一个长字符串吗?你用的是Jupyter笔记本吗?你是从文件中打开的吗?您正在使用文档的复制/粘贴。没有这些信息很难回答您的问题。是的,文档是一个长字符串。是的,我使用的是juputer笔记本。我将整个文档作为一个长字符串的.npy文件阅读。在读取了文件form a.npy后,它会变成numpy.ndarray.NO,我没有使用文档的复制粘贴。该文档是一个pdf文件,首先被提取,然后作为.npy文件加载。npy文件的形状为(1,2)1,即文档数量。2-对于元素(其中一个是文档Id,另一个是长文本,它是问题中文本的一部分。您可以执行循环,而不是尝试使用正则表达式。有时,正则表达式不重视这项工作。我使用“((名称[]+)([\w\d]+)[[\w\d]+)[+([\w\d]+)”云选择变量,但这并不常见,伙计。看看:
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']}