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

toy*_*toy 1 python regex

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

这是我到目前为止所得到的.不知道我在这里做错了什么.

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
Run Code Online (Sandbox Code Playgroud)

我想要的是两个被捕获的团体.所以我知道第一组是FROM时间,后一组是TO时间.

vks*_*vks 5

([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
           ^^               ^^            ^^                 ^^
Run Code Online (Sandbox Code Playgroud)

只需使AM组件可选.参见demo.Also make first part +,否则它将匹配空字符串.

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


Tyl*_*ian 5

任一捕获组中的AM/PM都不是可选的

([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
Run Code Online (Sandbox Code Playgroud)

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

8M-9M, which is not valid.
Run Code Online (Sandbox Code Playgroud)