我们应该覆盖测试版名,其中正则表达式应该给比赛的所有案件。
所以我们开始用β-"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()' –