我有一个包含以下数据的文本文件:
[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 。
答案 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']