0

ネットでよく検索しましたが、順序やその他の一般的な要件に対応する正規表現が見つかりませんでした。具体的なニーズは次のとおりです。

  1. 文字で始まります。
  2. 最低6文字;
  3. 少なくとも1桁。

私はPythonで作業しています。2&3の正規表現を作成する方法は知っていると思いますが、順序が関係しているため、1を組み合わせる方法が見つかりませんでした。同様に、私は1の書き方を知っていますが、それを一般的な要件の正規表現と組み合わせる方法を見つけられませんでした(つまり、角かっこ正規表現...名前がわかりません)

2と3の場合:

^(?=.{6,})(?=.*[\d]).*$

1の場合:

^[a-zA-Z].*

助言がありますか?

4

5 に答える 5

7

A B 、およびCに一致する「接続」式を作成する一般的な手法は^、条件を先読みグループとしてリストすることから始めます。

^(?=A)(?=B)(?=C)

あなたの場合:

^(?=[A-Za-z])(?=.{6,})(?=\D*\d) 

なぜこのexprが機能しないのかという質問について$

^(?=[A-Za-z])(?=.{6,})(?=\D*\d)$ 

これは、仮想の「入力の開始」を除いて、文字を消費しないためです。にを追加する$と、はと同等になり^$、空の文字列にのみ一致します。

于 2012-05-24T00:24:17.573 に答える
4

私の特定のニーズは次のとおりです。

  • 文字で始まります。
  • 6文字以上。
  • 少なくとも1桁。

その場合、正規表現を気にしないでください。必要なプロパティを直接テストします。

len(x) > 6 and x[0].isalpha() and any(c.isdigit() for c in x)
于 2012-05-24T00:24:53.510 に答える
1

正規表現が解決策であると想定しないことから始めます。次に、利用可能な他のツールについて考えます。

文字で始まります:

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))
于 2012-05-24T00:25:12.963 に答える
0

^(?=.{6,})[a-zA-Z].*\d.*$必要なものです。

于 2012-05-24T00:23:55.420 に答える
0

正規表現は長さの測定にはあまり効果的ではありません。そのためにはPythonlen()を使用してください。他の2つの条件については、次のことを試してください。

[a-zA-Z][a-zA-Z0-9]*[0-9][a-zA-Z0-9]*
于 2012-05-24T01:43:14.210 に答える