[英]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.