我的正则表达式从字符串中提取时间有什么问题?

2024-09-25 16:34:33 发布

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

我正试图想出一个正则表达式来从字符串中提取时间来构建应用程序。在

以下是我目前所掌握的情况。不知道我做错了什么。在

https://regex101.com/r/fC0lI5/1

我可以得到一些弦,但不是所有不同的变体。在

([01]?[0-9]*:?[0-9]*[AP]M?)-([01]?[0-9]*:?[0-9]*[AP]M?)


8-8:30AM MON TUES THURS FRI
8-10:30AM MON TUES THURS FRI
8:30AM-10:30AM MON TUES THURS FRI
10:30AM-11:30AM MON TUES THURS FRI
10:30AM-11:30AM MON TUES THURS FRI
8AM-8:30AM
10-11PM

我要的是两个被俘的小组。所以我知道第一组是FROM时间,后一组是TO时间。在


Tags: 字符串httpscom应用程序时间情况变体ap
3条回答
([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
           ^^               ^^            ^^                 ^^

只需生成AM组件可选。请参阅演示。还有使第一部分+,否则它将匹配空字符串。在

https://regex101.com/r/fC0lI5/2

两个捕获组中的AM/PM都不是可选的

([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)

我认为我的比其他人更有效,因为其他人会允许(他们已经修正了他们的)

^{pr2}$

正如其他答案所指出的,A和p不是可选的。此外,您的正则表达式将匹配其他字符串(如“:A-:A”或“98387899A-A”)。在

这是有效的,而且会比你的更严格:

((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)-((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)

有关regex语法的完整描述,请参见the Python manual。在

相关问题 更多 >