2016-12-01 117 views
-1

能否请你帮我蟒蛇正则表达式,可以匹配正则表达式的重复模式

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

简单地说 - 它的时间以CSV格式列表

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

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

我必须具备r级egex的文字给出。我提供的模式仅适用于“上午9点”或“下午10点30分”,但不适用于“上午9点,下午3点30分”的时段csv – user2349115

+0

https://txt2re.com/index-python.php3?s=4 :30 am,%209am&2&10&6 –

回答

1

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

Demo here

+0

它甚至可以匹配任何附加的文本添加在它的末尾 – user2349115

+0

@ user2349115 - 什么样的文本?你能给我输入吗? – TheLostMind

+0

“9am,5pm,4:30 am,3amsdfkldnfknskflksd hello” - text – user2349115

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)*$ 
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
0

使用下面的正则表达式:

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

输出:

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