我們應該覆蓋測試版名,其中正則表達式應該給比賽的所有案件。
所以我們開始用β-"Crome beta"
的第一個例子寫模式:
' [Bb]eta'
我們使用[BB]在第二位匹配B
或b
。
第二個例子"Crome_beta"
添加_
作爲分隔符:
'[ _][Bb]eta'
第三"Crome beta2"
和第四"Crome_betaversion"
實例由最後的regexp覆蓋。
第五示例"Crome 3beta"
迫使我們改變圖案是這樣的:
'[ _]\d*[Bb]eta'
其中\d
爲[0-9]和*
替代從\d
0
到infinity
元件允許。
第六個示例"CromeBeta2.3"
顯示Beta可以沒有前面的_或空格,只是從大寫開始。因此,我們有|
結構,該結構在Python一樣or
運營商覆蓋它:
'[ _]\d*[Bb]eta|Beta'
第七例子Beta Crome 4
由至少正則表達式匹配的(因爲它與Beta
開始)。但是,它也可以是beta Chrome 4
,所以我們就這樣換着花樣:
'[ _]\d*[Bb]eta|Beta|^beta '
我們不使用,因爲Beta
^[Bb]eta
已經被覆蓋。
另外,我應該提及,我們不能使用re.I
,因爲我們必須在正則表達式中區分beta
和Beta
。
因此,測試代碼是(對於Python 2.7):
from __future__ import print_function
import re, sys
match_tests = [
"Crome beta",
"Chrome Beta",
"Crome_beta",
"Crome beta2",
"Crome_betaversion",
"Crome 3beta" ,
"Crome 3Beta",
"CromeBeta2.3",
"Beta Crome 4",
"beta Chrome ",
"Cromebeta2.3" #no match,
"betamax" #no match,
"Betamax"]
compiled = re.compile(r'[ _]\d*[Bb]eta|Beta|^beta ')
for test in match_tests:
search_result = compiled.search(test)
if search_result is not None:
print("{}: OK".format(test))
else:
print("{}: No match".format(test), file=sys.stderr)
我看不出有任何需要使用負回顧後。 另外,您使用了捕獲組(beta)
(括號)。也沒有必要。它只會減慢正則表達式。
''beta在product_name.lower()' –