gpt4 book ai didi

Python正则表达式,去除重复的类

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:02 26 4
gpt4 key购买 nike

我有一堆时间戳字符串。每个字符串都具有三个部分以及各部分之间的分隔符。分隔符可以是这些 [.:,;] 符号中的任何一个。每个部分都包含数字。第一个可能包含一个或两个数字。任何其他部分都可以包含两位数字。我需要检索这些数字并用它们完成一些操作。我使用Python3。

所以我写了这段代码:

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})$'

提前谢谢您。我将不胜感激任何建议。

最佳答案

为什么不使用 re.split() :

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

关于Python正则表达式,去除重复的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34408660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com