如何匹配Python中的Regex中的任何一个或组?

时间:2015-12-22 21:20:55

标签: python regex

我有这个正则表达式。

([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

2 个答案:

答案 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)?)