Python排序正则表达式

时间:2015-07-12 04:31:13

标签: python regex sorting

你做一个文件,通过一个txt文件进行排序并选择名称:和前三个统计数据并将它们存储在一个字典中然后对下一个名称+ 3个统计数据执行相同操作如果dict不是智能存储它们在列表中,我认为也可以。

txt文件如下所示:

player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98 

我试过player = re.findall(r"[-+]?\d*\.\d+|\d+", player_string) 但它只给了我玩家评分,我想我需要使用某种字典来存储所有不同的玩家。

如果这很复杂,你不必为我做整件事,只需指出正确的方向。 谢谢。 我使用py2.6

3 个答案:

答案 0 :(得分:0)

我认为你需要的是:

import re

player_string = "player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98"

pattern = re.compile(r"player\s+(\w+)\s+(\d+)\s+(\d+)\s+(\d+)")
matches = pattern.findall(player_string)
d = {}
for m in matches :
    print m
    d[m[0]] = m[1:]

print d

注意你写了“playerc”和“playerd”没有空格,这些2将无法找到。

答案 1 :(得分:0)

我认为这可能会给你一些你想要的东西,虽然没有使用正则表达式:

my_list = # list of players and stats from above

# build a list by splitting the original string at the word "player"
# and stripping extra white space
my_list_split = [item.strip() for item in my_list.split("player")]

这给出了一个像['', 'a 34 45 56', ...]这样的列表,其中每个元素应该包含不同玩家的信息。接下来,我们将元素拆分为字典,其中播放器名称是键,统计信息是值:

my_dict = {}  # initialize the dictionary
for entry in my_list_split:
  if entry is not "":  # possible you will have a blank string at the beginning
    entry_list = entry.split(" ")  # split entry at spaces
    my_dict[entry_list[0]] = entry_list[1:]  # first element is the name, remaining elements are the stats

您可以将其修改为仅获取前两个或三个统计数据,或者更改统计信息的存储方式或其他内容。您提供的列表中生成的my_dict.items()为:

[('a', ['34', '45', '56']),
 ('c', ['39', '29', '18']),
 ('b', ['38', '93', '75']),
 ('d', ['38', '98'])]

答案 2 :(得分:0)

我认为你需要的是:

import re

player_string = "player a 34 45 56 player b 38 93 75 playerc 39 29 18 playerd 38 98"

pattern = re.compile(r"([\w ]*?)\s+(\d+)\s+(\d+)\s+(\d+)")
matches = pattern.findall(player_string)
d = {}
for m in matches :
    print m
    d[m[0].strip()] = m[1:]

print d

在最后一名玩家“玩家”之后,你只有2个数字,而不是正则表达所期望的3。

输出:

{'playerc': ('39', '29', '18'), 'player b': ('38', '93', '75'), 'player a': ('34', '45', '56')}