Python正则表达式:获取没有使用搜索字符串的结果

时间:2014-06-10 16:15:18

标签: python regex python-3.x

我有一个包含以下数据的文本文件:

[AC 2 StartTime 3.29 s   32912KB -> 27720KB   24.54 ms]
[AC 3 StartTime 3.35 s   39404KB -> 36252KB   11.05 ms]
[AC 4 StartTime 3.55 s   44592KB -> 39316KB   1.91 ms]

我想使用正则表达式获取数组中的StartTime。我尝试使用脚本:

StartTime = re.findall(r"StartTime \d+\.\d+",text)

但是,它会随时间提供 StartTime 字符串。如何在没有字符串的情况下获得时间(即整数)?

结果是开始3.29 ,但我想只是3.29

2 个答案:

答案 0 :(得分:3)

您可以使用捕获组( )来提取所需的部分。 findall返回捕获的组。

>>> StartTime = re.findall(r'StartTime ([\d.]+)', text)
['3.29', '3.35', '3.55']

您也可以在此处使用正面观察

>>> StartTime = re.findall(r'(?<=StartTime )[\d.]+', text)
['3.29', '3.35', '3.55']

注意:我在这里使用[\d.]+,表示任何字符:数字(0-9),.1或更多次)

答案 1 :(得分:3)

您可以包含一个捕获组(使用括号)来选择所需的部分:

 StartTime = re.findall(r"StartTime (\d.\d.)", text)
                                  # ^ capture this part

但是你的正则表达式似乎很奇怪 - 它得到一个数字('\d'),然后是任何字符'.' - 一个句号)后跟一个数字后跟任何字符。你可能会更好:

StartTime = re.findall(r"StartTime (\d\.\d{2})", text)

这是一个数字后跟一个句号('\.' - 注意反斜杠转义)后跟两位数字。

>>> import re
>>> s = """[AC 2 StartTime 3.29 s   32912KB -> 27720KB   24.54 ms]
[AC 3 StartTime 3.35 s   39404KB -> 36252KB   11.05 ms]
[AC 4 StartTime 3.55 s   44592KB -> 39316KB   1.91 ms]"""
>>> re.findall(r"StartTime (\d\.\d{2})", s)
['3.29', '3.35', '3.55']