python正则表达式前10名

2024-06-08 22:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

html_log:jeff 1153.3 1.84 625:54 1 2 71 3 2 10 7:58 499 3 5 616:36 241 36           
html_log:fred 28.7 1.04 27:34 -10 18 13 0:48 37 18 8 -3.63 
html_log:bob 1217.1 1.75 696:48 1 5 38 6 109 61 14:42 633 223 25 435:36 182 34 
... continues

上面是文本文件。你知道吗

mystats = fo.readlines()
fo.close()

change = str(mystats)

pattern = re.compile("html_log:(?P<name>[^ ]*) (?P<score>[^ ]*)")
mylist=sorted(pattern.findall(change), key=lambda x: float(x[1]), reverse=True)

我的输出现在是

bob 1217.1
jeff 1153.3
fred 28.7

问题。。 我试图得到第五个int值,但我的输出应该是

bob 5
jeff 2
fred 18

我不知道只有第五个值的模式。你知道吗


Tags: relogclosehtmlfredchangepatternbob
3条回答

你真的不需要正则表达式。你知道吗

s = [line.split() for line in file]
[(x[0].split(':')[1], float(x[5])) for x in s]

这个正则表达式怎么样:

html_log:(?P<name>[^ ]*)(?: [^\s]+){4} (?P<score>[^ ]*)

参见here了解测试。你知道吗

更传统一点,但在短线或空线中幸存下来:

import io # Python 3 use StringIO in Python 2
fobj = io.StringIO("""
html_log:jeff 1153.3 1.84 625:54 1 2 71 3 2 10 7:58 499 3 5 616:36 241 36           
html_log:fred 28.7 1.04 27:34 -10 18 13 0:48 37 18 8 -3.63 
html_log:bob 1217.1 1.75 696:48 1 5 38 6 109 61 14:42 633 223 25 435:36 182 34""")

scores = []
for line in fobj:
    split_line = line.split()
    try:
        scores.append((int(split_line[5]), split_line[0].split(':')[1]))
    except IndexError:
        continue

我们需要把它们分类。越大越好:

top_ten = sorted(scores, reverse=True)[:10]

把它们展示得更好一点:

for score, name in top_ten:
    print(name, score) 

输出:

fred 18
bob 5
jeff 2

相关问题 更多 >