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
问题.. 我试图获得第5个int值,但我的输出应该是
bob 5
jeff 2
fred 18
我不知道只匹配第5个值的模式。
答案 0 :(得分:2)
你真的不需要正则表达式。
s = [line.split() for line in file]
[(x[0].split(':')[1], float(x[5])) for x in s]
答案 1 :(得分:1)
答案 2 :(得分:0)
有点传统但存在短线或空线:
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
答案 3 :(得分:0)
使用此模式:
pattern = re.compile(r'html_log:([^ ]*) (?:[^ ]+ ){4}([^ ]*)')
它跳过4个数字并捕获第五个数字。