Python:使用正则表达式进行数据验证

San*_*raj 3 python regex

我正在尝试使用它Python regular expression来验证变量的值。

验证规则如下:

  • 该值可以包含a-z、和(no , no , no )中A-Z的任何一个0-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"
Run Code Online (Sandbox Code Playgroud)

我觉得应该有更好的方法来完成上述任务。我正在寻找类似以下的东西:

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 */
Run Code Online (Sandbox Code Playgroud)

是否存在这样的内置函数?

rua*_*akh 6

在正则表达式中,元字符^$分别表示“字符串开头”和“字符串结尾”;因此,您可以简单地要求正则表达式匹配整个字符串,而不是查看匹配的内容并将其与整个字符串进行比较:

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

此外,由于您只使用正则表达式一次 - 您编译它并立即使用它 - 您可以使用便捷方法re.match将其作为一个步骤来处理:

import re
data = "asdsaq2323-asds"
if re.match("^[a-zA-Z0-9*]+$", data):
    print "match"
else:
    print "no match"
Run Code Online (Sandbox Code Playgroud)