首先不要假设正则表达式是解决方案。然后考虑其他可用的工具。
以一封信开头:
word and word[0].isalpha()
(如果此测试在长度 1 之后进行,则word and
可以丢弃该位。)
至少六个字符长:
len(word) >= 6
至少一位数字:
any(letter.isdigit() for letter in word)
不过,最后一个是O(n)
针对单词长度的,如果您使用 20 个字符而没有数字,由于字符串实例化,它实际上最终会比 RE 解决方案慢;你可以反驳说,如果这个相当冗长的版本会经常出现没有早期数字的长字符串:
('0' in word or '1' in word or '2' in word or '3' in word or
'4' in word or '5' in word or '6' in word or '7' in word or
'8' in word or '9' in word)
然后,您可以轻松地将这些组合起来。记住这样的事情,把它放在一个带有适当文档字符串的单独函数中;不要把魔法计算放在其他不相关的事情中间。
def word_rule_check(word):
'''
Check that the word complies to Rule such-and-such; it must:
1. start with a letter,
2. be at least 6 characters long, and
3. contain at least one digit.
'''
return (len(word) >= 6 and
word[0].isalpha() and
any(letter.isdigit() for letter in word))