这是正则表达式仅此而已的地方之一:
_digits = re.compile('d')def contains_digits(d): return bool(_digits.search(d))小样:
>>> _digits = re.compile('d')>>> def contains_digits(d):... return bool(_digits.search(d))... >>> contains_digits('0798237 sh 523-123-asdjlh')True>>> contains_digits('sh asdjlh')False您可以使用@Wallacolloo的答案中所述的
any方法,但这比简单的正则表达式要慢:
.isdigit()
>>> import timeit>>> timeit.timeit("contains_digits('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits')0.77181887626647949>>> timeit.timeit("contains_digits_any('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits_any')1.7796030044555664该
if方法与正则表达式相当:
>>> timeit.timeit("contains_digits_if('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits_if')0.87261390686035156但是,如果数字出现在文本的后面,情况会变得更糟:
>>> timeit.timeit("contains_digits('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits')1.202538013458252>>> timeit.timeit("contains_digits_any('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits_any')5.0348429679870605>>> timeit.timeit("contains_digits_if('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits_if')3.707183837890625在Mac OS X 10.7上的python 2.6上测试了时序。



