我试图允许用户输入字母数字、下划线和空格作为名称。我一直在if not re.search(r'^[\w-]+$', name):
检查名称是否包含字母数字、下划线和空格以外的任何内容。但在这里我只能输入一个词,而不是多个。我究竟做错了什么?
问问题
2784 次
3 回答
6
你没有做任何明显错误的事情。您的问题也不完全清楚,所以我将尝试解决几个可能的问题。
为什么正则表达式只接受一个词?
在您的正则表达式中,\w
根据re
文档,您拥有的只是字母数字字符和下划线。您没有包括的是空格字符,因此任何带有空格的名称(包括分隔名字和姓氏的名称)都将与您的正则表达式匹配,因此False
由not
. 您应该检查是否有任何非字母数字字符/下划线/空格如下:
if not re.search(r'^[\w- ]+$', name):
或者,如果您也出于某种原因担心换行符 ( \n
) 或制表符 ( \t
) 以及其他类型的空格:
if not re.search(r'^[\w\s- ]+$', name):
为什么我一次只能检查一个名字?
这是因为正则表达式一次只会搜索一个字符串。如果你想让它检查多个名称,你应该对每个名称运行正则表达式,格式如下:
# assuming name_list is a list of name strings
for name in name_list:
if not re.search(r'^[\w- ]+$', name):
# do whatever
于 2012-12-30T06:45:22.910 回答
2
您的正则表达式不允许空格(相反,它允许您在问题中未提及的破折号)。
if not re.search(r'^[\w ]+$', name):
只允许 ASCII 字母、数字、下划线和空格(并且至少需要一个字符)。
于 2012-12-30T06:52:13.930 回答
0
你需要学习一点关于正则表达式的知识。
我个人是从Google 课程开始的,阅读文档已经足够好了。
于 2012-12-30T15:12:59.030 回答