我有这个正则表达式。
([01]?[0-9]+:?[0-9]*(?:[AP]M)?)\s?(?:-|TO)\s?([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
用于捕捉时间。
8-8:30AM MON TUES THURS FRI
NO PARKING (SANITATION BROOM SYMBOL) 7AM-7:30AM EXCEPT SUNDAY
但是,我希望它能够捕获数字或单词MIDNIGHT
NO PARKING (SANITATION BROOM SYMBOL) MOON & STARS (SYMBOLS) TUESDAY FRIDAY MIDNIGHT-3AM
如何扩展它。这是我到目前为止所得到的。
https://regex101.com/r/fC0lI5/7
这是我的输入
NO PARKING (SANITATION BROOM SYMBOL) MOON & STARS (SYMBOLS) TUESDAY FRIDAY MIDNIGHT-3AM
我希望第一组为MIDNIGHT
,第二组为3AM
答案 0 :(得分:2)
您可以使用以下正则表达式:
(MIDNIGHT|[01]?[0-9]+:?[0-9]*(?:[AP]M)?)\s*(?:-|TO)\s*(MIDNIGHT|[01]?[0-9]+:?[0-9]*(?:[AP]M)?)
请参阅regex demo
我刚刚将MIDNIGHT
移动到第一个和第二个捕获组中作为替代,并将?
替换为*
两侧的TO
量词或者连字符(以防万一那里有多个空间。)
答案 1 :(得分:0)
根据您已发布的内容,您似乎只需将MIDNIGHT放入群组中即可。那么你可能也希望将两种可能性包含在一个组中。像这样:
(([01]?[0-9]+:?[0-9]*(?:[AP]M)?)|(MIDNIGHT))?\s?(?:-|TO)\s?([01]?[0-9]+:?[0-9]*(?:[AP]M)?)