你好,我的程序有问题。我想测试我输入的字符串是否是字母数字。你知道吗
def logUtb(fl, str):
now = datetime.datetime.now()
fl.write(now.strftime('%Y-%m-%d %H:%M') + " - " + str + "\n");
return;
#Test alphanumeric
def testValidationAlphaNum():
valid = re.match('[A-Za-z0-9]', '!@#@$@$@')
if valid == True:
logUtb(f, 'Alphanumeric')
else:
logUtb(f, 'Unknown characters')
如你所见,我进入了'!@#@$@$@'将由我的正则表达式模式进行测试。它不是返回“未知字符”到我的报告日志,而是返回字母数字。你们能告诉我我的程序有什么问题吗?谢谢!你知道吗
可能是
还有工作。
\w
是字母数字。(我想补充一点,根据python的说法,下划线是字母数字的。)所以如果您不需要这些,您的正则表达式应该是:^[A-Za-z0-9]*$
或者,它可以
[^_/W]
但是
if valid == True
必须是if valid
才能工作。你知道吗^{} 如果字符串不匹配,则返回
None
;如果匹配,则返回MatchObject
。所以== True
测试永远不会满足。如果您真的看到了'Alphanumeric'
输出,那么这不是您发布的代码的结果。你知道吗在任何情况下,都应该使用^{} 来表示:
我同意其他人所说的板蓝根()将是一个更简单的选择。你知道吗
不过,我想指出一些关于您尝试的regex模式的事情。正如alexbaldwin所说,你的模式只会在字符串的开头寻找一个字母数字。因此,在字符串的其余部分可能还有其他内容,但仍然可以得到匹配项。你知道吗
您应该做的是量化您的字符类,并将该类锚定到字符串的末尾。要测试字符串是否包含一些字母数字,应该选择+量词,它至少查找一个字母数字。请确保使用$将模式锚定到字符串的结尾,否则可能会在结尾插入一些非字母数字:
当然,对于给定的字符串,这将返回false。在这里使用*的问题是,即使是针对空字符串,它也会返回MatchObject,我假设您希望至少存在一个字母数字字符。另外请注意,不需要使用“^”将字符类锚定到字符串的开头,因为重新匹配()只在字符串的开头开始搜索。然后要用条件测试的是MatchObject是否由重新匹配():
有关量词和锚点的更多信息,请参见文档:
http://docs.python.org/2/library/re.html
相关问题 更多 >
编程相关推荐