2015-04-18 48 views
-2

我在Python中驗證這種類型的輸入字符串時遇到問題。Python正則表達式來驗證這種格式的字符串

工作日有不定數量的字符。

Regular: 16Mar2009(mon), 17Mar2009(tues), 18Mar2009(wed) 
Regular: 20Mar2009(fri), 21Mar2009(sat), 22Mar2009(sun) 
Rewards: 26Mar2009(thur), 27Mar2009(fri), 28Mar2009(sat) 

我想驗證整個行,每行應該有這樣的特定格式:

<name>: <date>(<weekday>), <date>(<weekday>), <date>(<weekday>) 

提前感謝!

回答

1

試試這個:\w+: \d+\w+\(\w+\)(?:,\s*\d+\w+\(\w+\))*

使用程序,如kiki-re您可以輕鬆地測試正則表達式。

+0

謝謝哈維爾,它就像一個魅力! –

+1

這對於給定的例子有效,但不是非常嚴格。例如,它允許每行超過三個條目,並允許各種其他無效輸入。 '\ w'的範圍超出了字母表。 –

+0

所有有效的問題。我的意圖是提供一個改進的起點。我們不知道所有的限制。 – Javier

0
Regular: 20Mar2009(fri), 21Mar2009(sat), 22Mar2009(sun) 

your_regex = r'^[A-Za-z]+:\s+(?:\d{1,2}[A-Za-z]{3}\d{4}\([A-Za-z]{3}\),\s+){2} 
       \d{1,2}[A-Za-z]{3}\d{4}\([A-Za-z]{3}\)$' 

要看到這是如何工作的,請參閱下面的圖片和解釋: enter image description here

NB:你可以使用\w,但對應\w字符類是[a-zA-Z0-9_]

r裝置解釋爲原始字符串
^裝置開始
[A-Za-z]意味着是在字符類A的任何字符,B,C ... Z和A,B,C,... Z
+指1或大於1的前述
:字面結腸
\s指空白
(?:...)指基團相匹配,但不捕獲(參見捕獲組的替代(...)
{x,y}意味着必須存在[X,Y]什麼的之前該
{x}意味着必須存在完全相同的「x」無論之前這個
\(\)來到意味着(),但需要先由於括號是正則表達式中的特殊字符,因此可以使用\
$手段與

結束雖然這可能不是你想要什麼,它是否適合你的輸入和你現在希望有改變它以適應您的需求的工具。您應該考慮邊緣情況,但是,例如在上面提出的解決方案中,您可以輕鬆地進行匹配:blah: 99zzz0000...祝您好運!

相關問題