Python正则表达式问题与分组

Python正则表达式问题与分组,python,regex,python-3.x,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())) 我得到的结果是 我尝试使用.group(),但

我正在尝试解析文本文件中的数据,该文本文件的行如下:

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()))
我得到的结果是

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


如何修复此问题?

在使用了
Bob之后,您缺少了
,您需要更精确的日期部分表达式-例如,
\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')

关于如何使用它,您没有提供足够的信息,但是因为您得到了一个
匹配
对象,所以调用
.group()
时,它不应该是
,除非您未能将结果存储到正确的位置。很可能您正在处理许多行,其中一些匹配,一些不匹配,并且在访问组之前没有检查是否匹配

在进一步使用代码之前,您的代码应该始终验证它是否与
匹配
;确保您的测试结构如下:

match = re.search(r"On ([0-9,-, ]+)Bob used ([0-9\.]+)", line.strip())
if match is not None:
    ... do stuff with match.group() here ...
... but not here ...

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

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')]

有人告诉我这是抄写错误,因为
打印
会被点击,但根据代码的不同,错误代码出现在
搜索
中,用于
.group()
,而不是
打印
中。不管怎么说,这都是个好消息。谢谢你,这解决了问题。暗影游侠的回答也有帮助,因为它在第一次得到“无”后就失败了。我希望我能在这两个方面都投上一票,谢谢你们的帮助。