3

Python regular expression変数の値を検証するために使用しようとしています。

検証規則は次のとおりです。

  • 値には、、、および (no 、 no 、 no ) のいずれかを含めることがa-zできます。A-Z0-9*blank-,
  • 値はstart、数字(0-9)またはアルファベット(a-z, A-Z)または*
  • 値はend、数字(0-9)またはアルファベット(a-z, A-Z)または*
  • 中間の値には、数字またはアルファベットを含めることができます(0-9)(a-z, A-Z)*
  • その他の値は許可されません

現在、次のコード スニペットを使用して検証を行っています。

import re
data = "asdsaq2323-asds"
if re.compile("[a-zA-Z0-9*]+").match(data).group() == data:
    print "match"
else:
    print "no match"

上記を行うためのより良い方法があるはずだと思います。次のようなものを探しています。

validate_func(pattern, data) 
/* returns data if the data passes the validation rules */
/* return None if the data does not passes the validation rules */
/* should not return part of the data which matches the validation rules */

そのような組み込み関数は存在しますか?

4

3 に答える 3

6

正規表現では、メタ文字^$は「文字列の開始」と「文字列の終了」を (それぞれ) 意味します。したがって、一致するものを確認して文字列全体と比較するのではなく、最初に正規表現が文字列全体と一致することを単純に要求できます。

import re
data = "asdsaq2323-asds"
if re.compile("^[a-zA-Z0-9*]+$").match(data):
    print "match"
else:
    print "no match"

さらに、正規表現は 1 回しか使用しないため (コンパイルしてすぐに使用するため)、便利なメソッドre.matchを使用して、それを 1 つのステップとして処理できます。

import re
data = "asdsaq2323-asds"
if re.match("^[a-zA-Z0-9*]+$", data):
    print "match"
else:
    print "no match"
于 2013-03-22T22:43:20.763 に答える
3

文字列全体がパターンと一致するようにするには、正規表現で文字列アンカーの先頭と末尾を使用します。例えば:

regex = re.compile(r'\A[a-zA-Z0-9*]+\Z')
if regex.match(data):
    print "match"
else:
    print "no match"

これを関数にする:

def validate_func(regex, data):
    return data if regex.match(data) else None

例:

>>> regex = re.compile(r'\A[a-zA-Z0-9*]+\Z')
>>> validate_func(regex, 'asdsaq2323-asds')
>>> validate_func(regex, 'asdsaq2323asds')
'asdsaq2323asds'

補足として、このような検証では、使用するフラグに応じて and の意味が変わり、文字\A列の末尾にある改行文字の直前に一致することを好みます。\Z^$^$$

于 2013-03-22T22:43:27.987 に答える
2

探していると思います

re.match('^[a-zA-Z0-9*]+$',data) and data

追加and dataはデータを返すだけですが、なぜそれが必要なのかわかりません。文字列が有効かどうかを確認するには、re.match の結果を None と照合するだけで十分です。

于 2013-03-22T22:41:14.127 に答える