理解Python中的re.search

时间:2012-12-30 06:15:40

标签: python

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

3 个答案:

答案 0 :(得分:6)

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

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

在正则表达式中,您有\w,根据re documentation,它只是字母数字字符和下划线。你包含 not 的是空格字符,所以任何带空格的名称(包括它的名字和名字是否分开)都将与你的正则表达式匹配,因此转向Falsenot。您应该怎么做以检查是否有任何非字母数字字符/下划线/空格如下:

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就足够了。