Python正则表达式,删除重复类

2024-03-28 09:15:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆时间戳字符串。每个字符串有三个部分和部分之间的分隔符。分隔符可以是以下任一项[.:,;]符号。每个部分都包含数字。第一个可以包含一个或两个数字。任何其他部分可能包含两位数字。我需要检索这些数字并用它们执行一些操作。我用Python

所以我写了这个代码:

import re
lines = ('1:24.15', '17.01.01', '05:07:28', '175.11.123', '4:35,07', '01;21;73', '00;1;1', '7;7.12')
pattern = re.compile(r'^(\d{1,2})[:.,;](\d{2})[:.,;](\d{2})$')
for i in lines:
    try:
        mm, ss, ff = pattern.search(i).groups()
    except AttributeError:
        print('{} is invalid'.format(i))
    print(int(mm) * 60 + int(ss) + round(int(ff) / 0.075 / 1000, 3))

我的问题是。。。如何减少这个正则表达式中的重复

r'^(\d{1,2})[:.,;](\d{2})[:.,;](\d{2})$'

先谢谢你。我将感谢你的任何建议


Tags: 字符串代码importre时间符号数字ss
2条回答

r'^(\d{1,2})([:.,;](\d{2})){2}$'

应该尽可能紧凑

为什么不使用^{}

pattern = re.compile(r"[.:;,]")
for line in lines:
    mm, ss, ff = pattern.split(line)

不过,这需要额外的长度检查mmssff。一方面-这会降低吸引力,但会导致更精确和更有意义的错误消息

pattern = re.compile(r"[.:;,]")
for line in lines:
    try:
        mm, ss, ff = pattern.split(line)
    except ValueError:
        print('{} has not enough digit groups'.format(line))
        continue

    if len(mm) not in (1, 2) or len(ss) != 2 or len(ff) != 2:
        print('{} has a digit group with invalid length'.format(line))
        continue

    print(int(mm) * 60 + int(ss) + round(int(ff) / 0.075 / 1000, 3))

相关问题 更多 >