我正在尝试使用Python regular expression
来验证变量的值。
验证规则如下:
a-z
,A-Z
,0-9
和*
(无blank
,无-
,无{{}中的任何一个1}}),
的数字为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"
是否存在一个这样的内置函数?
答案 0 :(得分:4)
在正则表达式中,元字符^
和$
表示“字符串开头”和“字符串结束”(分别);所以,不是看匹配什么,而是将它与整个字符串进行比较,你可以简单地要求正则表达式匹配整个字符串开头:
import re
data = "asdsaq2323-asds"
if re.compile("^[a-zA-Z0-9*]+$").match(data):
print "match"
else:
print "no match"
此外,由于你只使用了一次正则表达式 - 你编译它并立即使用它 - 你可以使用方便方法re.match
来处理它作为一个步骤:
import re
data = "asdsaq2323-asds"
if re.match("^[a-zA-Z0-9*]+$", data):
print "match"
else:
print "no match"
答案 1 :(得分: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'
作为旁注,我更倾向于\A
和\Z
而不是^
和$
进行验证,这样^
和{{1}的含义}可以根据使用的标志进行更改,$
将匹配字符串末尾的换行符之前。
答案 2 :(得分:2)
我认为你正在寻找
re.match('^[a-zA-Z0-9*]+$',data) and data
额外的and data
只是为了返回数据,但我不确定为什么需要这样做。检查re.match结果是否足以检查字符串是否有效。