的我要尋找一個正則表達式在python 19之前和之後的24正則表達式匹配或忽略一組兩位數字
文件名是test_case _ *。PY,其中星號來匹配一切是1或2位數字。 例如:test_case_1.py,test_case_27.py。
最初,我認爲像[1-19]應該工作,事實證明,比我想象的要困難得多。
有沒有人對這種情況下的解決方案的工作?
PS:我很好,即使我們可以在數x,一個用於數y畢竟數字之前發現的所有號碼一個一個正則表達式。
的我要尋找一個正則表達式在python 19之前和之後的24正則表達式匹配或忽略一組兩位數字
文件名是test_case _ *。PY,其中星號來匹配一切是1或2位數字。 例如:test_case_1.py,test_case_27.py。
最初,我認爲像[1-19]應該工作,事實證明,比我想象的要困難得多。
有沒有人對這種情況下的解決方案的工作?
PS:我很好,即使我們可以在數x,一個用於數y畢竟數字之前發現的所有號碼一個一個正則表達式。
喜歡的東西
"(?<=_)(?!(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 . `(?=\.)`
或者更緊湊
"(?<=_)(?!(19|2[0-4])\.)[0-9]+(?=\.)"
在20-24範圍內已經夯實。
我不會用正則表達式來驗證自己的號碼,我會用一個只用於提取號碼,如:
>>> 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
這樣的東西。
非常好。更好地做一些簡單的事情。簡單也可以讓你像你說的那樣適應它。 –
問題是少數測試用例框架使用正則表達式來匹配測試用例名稱。像-match =正則表達式。我很願意爲這種情況找到靈魂 – kbang
下應該這樣做(整個文件名匹配):
^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
這是一個非常好的做法,定義您接受的內容而不是您不接受的內容,這是執行正則表達式的最安全的方法。 –
@arshajii我喜歡原來的答案。很清楚,匹配19-24是程序中用於識別非19-24的文件所需的全部內容。這個問題確實會說「匹配或忽略一組數字」,這意味着作者可以輕鬆使用與其匹配的答案。 –
多數民衆贊成在偉大......但我試圖避免硬編碼。讓我們考慮19和24作爲x和y。 – kbang
@KiranBangalore可悲的是在正則表達式不工作的方式:-) – xanatos