繁体   English   中英

Python正则表达式问题和分组

[英]Python Regex Problems and grouping

我正在尝试从具有以下内容的文本文件中解析数据:

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:187'>

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

如何解决?

在使用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')

您没有提供足够的使用方式信息,但是由于返回了Match对象,因此调用.group()时不应将其设为None ,除非您无法将结果存储到正确的地方。 您很可能正在处理许多行,其中有些匹配,有些不匹配,并且在访问组之前不会检查是否匹配。

您的代码应始终在进一步Match之前验证其是否Match 确保测试的结构如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM