我的正则表达式通过以下代码获取Jan 26 00:00:15
:
re.search(r'^(w{3} d{2} d{2}:d{2}:d{2})', line).group(0)
字符串:
Jan 26 00:00:15 111.111.11.12 pppoe,ppp,info
但是擦除数字"2"我有两个空格,这返回一个错误,使用 pythex,分析这个字符串:
Jan 6 00:00:15 111.111.11.12 pppoe,ppp,info
Jan 26 00:00:15 111.111.11.12 pppoe,ppp,info
我让它忽略这些空格:^w{3}[^"]
,有时我的一天有 1 位或 2 位数字。我怎样才能服用它们?
您可以使用正则表达式范围说明符{1,2}
严格匹配前面标记的 1 到 2 次匹配。
做:
^w{3}s{1,2}d{1,2}s(?:d{2}:){2}d{2}
此外,我还使用了(?:d{2}:){2}
:在这里,非捕获组(?:d{2}:)
匹配两位数,后跟一个:
,之后{2}
匹配令牌两次 - 这是为了匹配HH:MM
这样 wo 就不必重复我们自己。 d{2}
之后匹配SS
.
例:
In [40]: [re.search(r'^w{3}s{1,2}d{1,2}s(?:d{2}:){2}d{2}', s).group() for s in l]
Out[40]: ['Jan 26 00:00:15', 'Jan 6 00:00:15']
我将为第一个数字的字符类添加一个空格。
re.search(r'^(w{3} [ d]d d{2}:d{2}:d{2})', line).group(0)
这样它就严格符合格式,不能匹配以下内容:
Jan 2 18:54:02
或
Jan 12 18:54:02
这应该可以解决问题:
re.search(r'^(w{3} +d{1,2} d{2}:d{2}:d{2})', line).group(0)
提示:http://regex101.com 当我需要正则表达式时,我一直使用它。