2016-12-01 105 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']