2014-03-12 42 views
1

我想匹配和組任一列出的單詞:正則表達式匹配空字符串?

aboutus/race/cruise/westerlies/weather/reach/gear/empty_string

這裏是一個解決方案,但它不會匹配empty_string:

^(aboutus|race|cruise|westerlies|weather|reach|gear)/$ 

所以我的問題是:如何在此匹配中包含空字符串?

我仍然沒有得到一個很好的解決方案。

因此,我特別爲empty_string添加了一個正則表達式:即^$

注意:這些正則表達式適用於django urls.py

更新:這將是更好的,如果捕獲組不包含/

+0

不會'^(公司簡介|比賽|巡航|西風|天氣|達到|齒輪|)/ $'工作? – njzk2

+0

'^(aboutus | race | cruise | westerlies | weather | reach | gear]?/ $' – karthikr

+0

空字符串仍然會跟着'/'嗎? – Drewness

回答

2

使用此

^$|^(aboutus|race|cruise|westerlies|weather|reach|gear)/$ 
+0

非常感謝你這就是我正在尋找的 – suhailvs

+0

最好是把''''''''放在最後,就像' '...齒輪)/ $ |^$''因爲我想在大多數情況下,被測試的字符串不會爲空,那麼如果「^ $''排在第二位,交替的第一部分將立即產生好的結果;每個測試的字符串都不會驗證零件「^ $''。 – eyquem

8

試試這個:

^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$ 

編輯: 如果「/」是在任何情況下,除了空字符串嘗試這

^((aboutus|race|cruise|westerlies|weather|reach|gear)(/))?$ 
+0

這是最好的正確解決方案。 '?'表示0或1次出現,這正是OP的目標。 – tenub

+0

抱歉'aboutus /'是必需的。我更新了這個問題。但空的字符串是純粹的空 – suhailvs

+0

然後試試這個 ^(aboutus/| race/| cruise/| westerlies/| weather/| reach/| gear /)?$ –

0

您可以使捕獲組可選:

^(aboutus|race|cruise|westerlies|weather|reach|gear)?/$ 
0
import re 

rgx = re.compile('^((aboutus|race|cruise|westerlies' 
       '|weather|reach|gear)/|)$') 

# or 

li = ['aboutus','race','cruise','westerlies', 
     'weather','reach','gear'] 
rgx = re.compile('^((%s)/|)$' % '|'.join(li)) 


for s in ('aboutus/', 
      'westerlies/', 
      'westerlies/ ', 
      ''): 
    m = rgx.search(s) 
    print '%-21r%r' % (s,rgx.search(s).group() if m else m) 

結果

'aboutus/'   'aboutus/' 
'westerlies/'  'westerlies/' 
'westerlies/ '  None 
''     ''