理解Python中的re.search

Jon*_*han 1 python

我试图允许用户输入字母数字,下划线和空格作为名称.我一直在if not re.search(r'^[\w-]+$', name):用来检查名称是否包含除字母数字,下划线和空格以外的任何内容.但在这里我只能输入一个单词,而不是多个单词.我究竟做错了什么?

jdo*_*dot 6

你没有做任何明显错误的事情.你的问题也不完全清楚,所以我会尝试解决几个可能的问题.

为什么正则表达式只接受一个单词?

在你的正则表达式中,你有\w,根据re文档,它只是字母数字字符和下划线.你所包括的是空格字符,所以用空间(包括如果它是分离的姓和名)的任何名称将由您的正则表达式匹配,因此转向Falsenot.您应该怎么做以检查是否有任何非字母数字字符/下划线/空格如下:

if not re.search(r'^[\w- ]+$', name):
Run Code Online (Sandbox Code Playgroud)

或者,如果您出于某种原因还关注newlines(\n)或tabs(\t)以及其他类型的空格:

if not re.search(r'^[\w\s- ]+$', name):
Run Code Online (Sandbox Code Playgroud)

为什么我一次只能检查一个名字?

那是因为正则表达式一次只能搜索一个字符串.如果要检查多个名称,则应针对每个名称运行正则表达式,格式如下:

# assuming name_list is a list of name strings
for name in name_list:
    if not re.search(r'^[\w- ]+$', name):
        # do whatever
Run Code Online (Sandbox Code Playgroud)