gpt4 book ai didi

javascript - 用于解析工作时间字符串的正则表达式模式

转载 作者:行者123 更新时间:2023-11-28 18:49:44 26 4
gpt4 key购买 nike

我正在编写一个 python 库来解析不同的工作时间字符串并生成标准格式的小时数。我陷入了以下情况:

我的正则表达式应该返回 Mon - Fri 7am - 5pm Sat 9am - 3pm 的组作为 ['Mon - Fri 7am - 5pm', 'Sat 9am - 3pm'] 但是如果 first 和 second 之间有一个逗号,那么它应该返回 []

逗号也可以在任何地方,但不应该在两个工作日和持续时间之间。例如:周一至周五上午 7 点至下午 5 点周六上午 9 点至下午 3 点,可通过电子邮件、电话联系 应返回['周一至周五上午 7 点至下午 5 点','周六上午 9 点至下午 3 点'].

这是我试过的,

import re
pattern = """(
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|m|w|f|thurs) # Start weekday
\s*[-|to]+\s* # Seperator
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|^(?![ap])m|w|f|thurs)? # End weekday
\s*[from]*\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Start hour
\s*[-|to]+\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Close hour
)"""

regEx = re.compile(pattern, re.IGNORECASE|re.VERBOSE)

print re.findall(regEx, "Mon - Fri 7am - 5pm Sat 9am - 3pm")
# output ['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm Sat - Sun 9am - 3pm")
# output ['Mon - Fri 7am - 5pm ', 'Sat - Sun 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm, Sat 9am - 3pm")
# expected output []
# but I get ['Mon - Fri 7am - 5pm,', 'Sat 9am - 3pm']
print re.findall(regEx, "Mon - Fri 7am - 5pm , Sat 9am - 3pm")
# expected output []
# but I get ['Mon - Fri 7am - 5pm ', 'Sat 9am - 3pm']

我还在我的正则表达式中尝试了否定的前瞻模式

pattern = """(
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|m|w|f|thurs)
\s*[-|to]+\s*
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|^(?![ap])m|w|f|thurs)?
\s*[from]*\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?)
\s*[-|to]+\s*
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?)
(?![^,])
)"""

但我没有得到预期的结果。我应该明确编写代码来检查条件吗?有什么方法可以只更改我的正则表达式而不是编写显式条件检查吗?

我喜欢实现的另一种方法是在两个工作日持续时间之间添加逗号(如果逗号不存在)并将我的正则表达式更改为按逗号分组/拆分。 “周一至周五上午 7 点至下午 5 点周六上午 9 点至下午 3 点” => “周一至周五上午 7 点至下午 5 点,周六上午 9 点至下午 3 点”

最佳答案

我认为你可以简单地通过匹配整个表达式来做到这一点,这样逗号(和其他字符是不允许的:

pattern = """^(
(
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|m|w|f|thurs) # Start weekday
\s*[-|to]+\s* # Seperator
(?:mon|tue|wed|thu|fri|sat|sun|mo|tu|we|th|fr|sa|su|^(?![ap])m|w|f|thurs)? # End weekday
\s*[from]*\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Start hour
\s*[-|to]+\s* # Seperator
(?:\d{1,2}(?:[:]\d{1,2})?)\s*(?:[ap][.]?m.?) # Close hour
)
)+$""

这将输出:

[('Sat 9am - 3pm', 'Sat 9am - 3pm')]
[('Sat - Sun 9am - 3pm', 'Sat - Sun 9am - 3pm')]
[]
[]

希望对你有帮助

关于javascript - 用于解析工作时间字符串的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746644/

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