Python正则表达式问题和分组

时间:2016-03-02 17:33:25

标签: python regex python-3.x

我正在尝试从包含以下行的文本文件中解析数据:

On 1-1-16 1:48 Bob used: 187
On 1-5-16 2:50 Bob used: 2

我想只打印时间和使用的数字,所以它看起来像:

1-1-16, 1:48, 187
1-5-16, 2:50, 2

我正在使用这个正则表达式:

print(re.search(r"On ([0-9,-, ]+)Bob used ([0-9\.]+)", line.strip()))

我得到的结果是< _sre.SRE_Match对象; span =(23,26),match ='Bob used used:187'>

我尝试使用.group()但是它给出错误“'NoneType'对象没有属性'group'”我也注意到它只发现第二个分组(数字)而不是第一个(日期和时间)

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您错过了:之后的Bob used,您需要更准确地表达日期部分 - 例如,\d+-\d+-\d+ \d+:\d+

>>> s = 'On 1-1-16 1:48 Bob used: 187 On 1-5-16 2:50 Bob used: 2'
>>> re.search(r"On (\d+-\d+-\d+ \d+:\d+) Bob used: ([0-9\.]+)", s).groups()
('1-1-16 1:48', '187')

答案 1 :(得分:1)

您没有提供有关如何使用它的足够信息,但由于您收到了Match个对象,因此当您致电{{1}时,该对象不应为None除非你没有将结果存储到正确的位置。很可能你正在处理许多行,其中一些行匹配,而另一些则不匹配,并且在访问组之前你没有检查你是否匹配。

在进一步使用之前,您的代码应始终验证它是否为.group();确保您的测试结构如下:

Match

答案 2 :(得分:1)

我自己对正则表达式很陌生,但我想出了这个

import re
source = "On 1-1-16 1:48 Bob used: 187\nOn 1-5-16 2:50 Bob used: 2" 
x=re.finditer('([0-9]-)+[0-9]+',source)
y=re.finditer('[0-9]+:[0-9]+',source)
z=re.finditer(': [0-9]*',source)
L = []
for i,j,k in zip(x,y,z):
    L.append((i.group(), j.group(), k.group().replace(': ', '') ))

print(L)

输出

[('1-1-16', '1:48', '187'), ('1-5-16', '2:50', '2')]