在python中获取字符串中的特定数字

时间:2017-12-10 18:21:07

标签: python regex string

如何在字符串中获取特定的整数?:

mystring = "[RUN #1 3%,   2 secs]  2 threads:        6673 ops,    3511 (avg:    3333) ops/sec, 3.60MB/sec (avg: 3.42MB/sec),  0.56 (avg:  0.59) msec latency"

我想在这一行得到3511和0.56

3 个答案:

答案 0 :(得分:4)

或者你不能在这种情况下使用正则表达式,它是可维护和可读的:

line = "[RUN #1 3%,   2 secs]  2 threads:        6673 ops,    3511 (avg:    3333) ops/sec, 3.60MB/sec (avg: 3.42MB/sec),  0.56 (avg:  0.59) msec latency"
answer = line.split()
print answer[9], answer[16]

答案 1 :(得分:1)

regular expression documentation开始,您可以尝试:

import re
s = '[RUN #1 3%, 2 secs] 2 threads: 6673 ops, 3511 (avg: 3333) ops/sec, 3.60MB/sec (avg: 3.42MB/sec), 0.56 (avg: 0.59) msec latency'
number_of_operations = int(re.search(r'ops,\s*([0-9]+)', s).group(1))
latency = float(re.search(r"sec\), ([-+]?\d*\.\d+|\d+) \(avg", s).group(1))

答案 2 :(得分:0)

您可以使用regex。如果您有多个空格和/或通常不确定字符串的确切结构,可能更容易直接提取您想要的数字(例如在Guillaume Jacquenot's answer中)但是分两步执行:

首先从字符串中删除所有浮点数

http://localhost:9000

然后选择您要查找的

import re
mystring = "[RUN #1 3%,   2 secs]  2 threads:        6673 ops,    3511 (avg:    3333) ops/sec, 3.60MB/sec (avg: 3.42MB/sec),  0.56 (avg:  0.59) msec latency"
all_numbers = map(float, re.findall(r'[+-]?[0-9.]+', mystring))