gpt4 book ai didi

python - 正则表达式将文本转换为天数失败 - Python 3.10.x

转载 作者:行者123 更新时间:2023-12-05 05:33:29 25 4
gpt4 key购买 nike

我有一个文本持续时间列表,例如,['142 天 16 小时', '128 天 9 小时 43 分钟', '10 分钟']

我需要构建一个函数来获取这些持续时间,而不是得出总天数。

特定文本可以是一天、几天和几小时、几小时和几分钟、一组分钟或一天、一小时和一分钟。

我尝试了以下方法:

def parse_dates(data):
days = int(re.match(r'\d+\sDay', data)[0].split(' ')[0]) if re.match(r'\d+\sDay', data) is not None else 0
hours = int(re.match(r'\d+\sHour', data)[0].split(' ')[0]) if re.match(r'^\d+Hour*s$', data) is not None else 0
minutes = int(re.match(r'\d+\sMinute', data)[0].split(' ')[0]) if re.match(r'\d+\sMinute', data) is not None else 0

days += hours / 24
days += minutes / 1440

return days

无论使用 re.match() 还是 re.search(),提供的函数都会失败,这让我相信表达式本身存在问题。

但是,小时和分钟始终显示为 0。如何修复我的 regex 或设计更好的解决方案来正确解析这些文件?

最佳答案

您可以尝试以下正则表达式 ( Demo ):

(?:(\d+) Days?)?(?: ?(\d+) Hours?)?(?: ?(\d+) Minutes?)?

解释:

  • (?:...) 标记一个非捕获组
  • (...) 标记一个捕获组
  • ? 在符号或组之后表示它是可选的
  • \d+表示一个或多个数字(0123...)

示例 Python 实现:

import re

_DHM_RE = re.compile(r'(?:(\d+) Days?)?(?: ?(\d+) Hours?)?(?: ?(\d+) Minutes?)?')
_HOURS_IN_DAY = 24
_MINUTES_IN_DAY = 60 * _HOURS_IN_DAY


def parse_dates(s: str) -> int:
m = _DHM_RE.search(s)
if m is None:
return 0

days = int(m.group(1) or 0)
hours = int(m.group(2) or 0)
minutes = int(m.group(3) or 0)

days += hours / _HOURS_IN_DAY
days += minutes / _MINUTES_IN_DAY

return int(days)


strings = """\
142 Days 16 Hours
128 Days 9 Hours 43 Minutes
10 Minutes
52 Hours
""".splitlines()

for s in strings:
d = parse_dates(s)
print(f'{s!r} has {d} days.')

关于python - 正则表达式将文本转换为天数失败 - Python 3.10.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73831307/

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