正则表达式:忽略空格并匹配下一个数字



我的正则表达式通过以下代码获取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 当我需要正则表达式时,我一直使用它。

最新更新