我正在尝试允许用户输入字母数字,下划线和空格以获取名称。
我一直在使用if not re.search(r'^[\w-]+$', name):
检查名称是否包含除字母数字,下划线和空格以外的任何内容。但在这里我只能输入一个单词,而不是多个单词。我做错了什么?
答案 0 :(得分:6)
你没有做任何明显错误的事情。你的问题也不完全清楚,所以我会尝试解决一些可能的问题。
在正则表达式中,您有\w
,根据re
documentation,它只是字母数字字符和下划线。你包含 not 的是空格字符,所以任何带空格的名称(包括它的名字和名字是否分开)都将与你的正则表达式匹配,因此转向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
答案 1 :(得分:2)
你的正则表达式不允许空格(相反它允许你在你的问题中没有提到的破折号。)
if not re.search(r'^[\w ]+$', name):
只允许ASCII字母,数字,下划线和空格(并且至少需要一个字符)。
答案 2 :(得分:0)
你需要学习一些正则表达式。
我个人从Google classes开始,阅读docs就足够了。