正規表現が解決策であると想定しないことから始めます。次に、利用可能な他のツールについて考えます。
文字で始まります:
word and word[0].isalpha()
(このテストが長さ1の後に続く場合、word and
ビットをドロップできます。)
少なくとも6文字の長さ:
len(word) >= 6
少なくとも1桁:
any(letter.isdigit() for letter in word)
ただし、この最後の1つは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)
その後、これらを簡単に組み合わせることができます。このようなことを覚えておいて、適切なdocstringを使用して別の関数に入れてください。他の無関係なものの真っ只中に魔法の計算を置かないでください。
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))