2013-08-05 72 views
1

的我要尋找一個正則表達式在python 19之前和之後的24正則表達式匹配或忽略一組兩位數字

文件名是test_case _ *。PY,其中星號來匹配一切是1或2位數字。 例如:test_case_1.py,test_case_27.py。

最初,我認爲像[1-19]應該工作,事實證明,比我想象的要困難得多。

有沒有人對這種情況下的解決方案的工作?

PS:我很好,即使我們可以在數x,一個用於數y畢竟數字之前發現的所有號碼一個一個正則表達式。

回答

1

喜歡的東西

"(?<=_)(?!(19|20|21|22|23|24)\.)[0-9]+(?=\.)" 

One or more digits `[0-9]+` 
that aren't 19-24 `(?!19|20|21|22|23|24)` followed by a . 
following a _ `(?<=_)` and preceding a . `(?=\.)` 

http://regexr.com?35rbm

或者更緊湊

"(?<=_)(?!(19|2[0-4])\.)[0-9]+(?=\.)" 

在20-24範圍內已經夯實。

+0

@arshajii我喜歡原來的答案。很清楚,匹配19-24是程序中用於識別非19-24的文件所需的全部內容。這個問題確實會說「匹配或忽略一組數字」,這意味着作者可以輕鬆使用與其匹配的答案。 –

+0

多數民衆贊成在偉大......但我試圖避免硬編碼。讓我們考慮19和24作爲x和y。 – kbang

+0

@KiranBangalore可悲的是在正則表達式不工作的方式:-) – xanatos

3

我不會用正則表達式來驗證自己的號碼,我會用一個只用於提取號碼,如:

>>> import re 
>>> name = 'test_case_42.py' 
>>> num = int(re.match('test_case_(\d+).py', name).group(1)) 
>>> num 
42 

,然後使用類似:

num < 19 or num > 24 

到確保num有效。原因是它的很多難以適應這樣做的正則表達式,而不是適應像num < 19 or num > 24這樣的東西。

+2

非常好。更好地做一些簡單的事情。簡單也可以讓你像你說的那樣適應它。 –

+0

問題是少數測試用例框架使用正則表達式來匹配測試用例名稱。像-match =正則表達式。我很願意爲這種情況找到靈魂 – kbang

2

下應該這樣做(整個文件名匹配):

^test_case_([3-9]?\d|1[0-8]|2[5-9])\.py$ 

說明:

^    # beginning of string anchor 
test_case_ # match literal characters 'test_case_' (file prefix) 
(   # begin group 
    [3-9]?\d  # match 0-9 or 30-99 
    |    # OR 
    1[0-8]  # match 10-18 
    |    # OR 
    2[5-9]  # match 25-29 
)    # end group 
\.py   # match literal characters '.py' (file suffix) 
$    # end of string anchor 
+0

這是一個非常好的做法,定義您接受的內容而不是您不接受的內容,這是執行正則表達式的最安全的方法。 –

相關問題