簡體   English   中英

我的正則表達式從字符串中提取時間有什么問題?

[英]What's wrong with my regex to extract time from a string?

我正在嘗試提出一個正則表達式來從字符串中提取時間來構建應用程序。

這是到目前為止我得到的。 不知道我在做什么錯。

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時間。

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

只需將AM組件設為可選項即可(參見demo),也可以使part +為首,否則它將匹配空字符串。

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

兩個捕獲組中的AM / PM都不是可選的

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

我認為我的方法比其他方法更有效,因為其他方法將允許(他們已經修復了他們的方法)

8M-9M, which is not valid.

正如其他答案所指出的那樣,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語法的完整說明,請參見Python手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM