重复模式的正则表达式

时间:2016-12-01 06:36:57

标签: python regex

你能不能得到我能匹配的python正则表达式

9am, 5pm, 4:30am, 3am

简单地说 - 它有csv格式的时间列表

我知道时间模式,这里是:

 '^(\\d{1,2}|\\d{1,2}:\\d{1,2})(am|pm)$'

5 个答案:

答案 0 :(得分:1)

^(\d+(:\d+)?(am|pm)(, |$))+将为您效劳。

Demo here

答案 1 :(得分:0)

如果你有一个正则表达式X,并且你想要一个用逗号和(可选)空格分隔的列表,那么这很简单:

^X(,\s*X)*$

当然,X是您当前的搜索模式没有锚点,但您也可以将其调整为更短。在我看来,一个更好的时代模式是:

\d{1,2}(:\d{2})?[ap]m

意味着你想要的完整模式是:

^\d{1,2}(:\d{2})?[ap]m(,\s*\d{1,2}(:\d{2})?[ap]m)*$

答案 2 :(得分:0)

您可以使用re.findall()获取给定正则表达式的所有匹配项

>>> str = "hello world 9am, 5pm, 4:30am, 3am hai"
>>> re.findall(r'\d{1,2}(?::\d{1,2})?(?:am|pm)', str)
['9am', '5pm', '4:30am', '3am']

<小时/> 它的作用是什么?

  • \d{1,2}匹配一位或两位数
  • (?::\d{1,2})匹配:后跟一个2位数。 ?:是为了防止正则表达式捕获该组。 最后的?使这部分成为可选部分。
  • (?:am|pm)匹配ampm

答案 3 :(得分:0)

使用以下正则表达式模式:

tstr = '9am, 5pm, 4:30am, 3amsdfkldnfknskflksd hello'
print(re.findall(r'\b\d+(?::\d+)?(?:am|pm)', tstr))

输出:

['9am', '5pm', '4:30am', '3am']

答案 4 :(得分:0)

试试这个,

((?:\d?\d(?:\:?\d\d?)?(?:am|pm)\,?\s?)+)

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