3

これは私の試みです

def matcher(ex):
    if re.match(r'^[\w|\d][A-Za-z0-9_-]+$', ex):
        print 'yes'

私の目標は、次のすべてを満たす提出物のみを照合することです

  1. 文字または数字のみで始まり、
  2. 文字、スペース、ダッシュ、アンダースコア、数字のみが許可されます
  3. すべての終了スペースが削除されます

私の正規表現でmatcher('__')は、有効と見なされます。本当に欲しいものを達成するためにどのように変更できますか?アンダースコアも含まれていると思い\wます。しかしmatcher('_')、一致していません...

4

1 に答える 1

12
def matcher(ex):
    ex = ex.rstrip()
    if re.match(r'^[a-zA-Z0-9][ A-Za-z0-9_-]*$', ex):
        print 'yes'

元の正規表現の問題:

  1. |文字クラスの交代を意味するのではなく、文字通りパイプ文字を意味します。

  2. 次の文字に使用+しました。つまり、1つ以上の文字を使用したため、のような1文字の文字列'_'は一致しません。

  3. \wアンダースコアを受け入れる最初の文字で使用しました。

于 2012-07-16T01:49:09.540 に答える