Python:正则表达式匹配字母数字不成功?

55 投票
3 回答
111801 浏览
提问于 2025-04-16 10:10

我想要检查从网站输入的字符串,看看它是否是字母和数字的组合,并且可能包含下划线。我的代码是:

if re.match('[a-zA-Z0-9_]',playerName):
            # do stuff

但不知为什么,这段代码竟然能匹配到一些奇怪的字符,比如:nIg○▲ ☆ ★ ◇ ◆

我只想要匹配普通的字母A-Z、数字0-9和下划线_,我是不是漏掉了什么?

3 个回答

2

…检查是否是字母数字组合,并且可能包含一个下划线。

你是说字面意思吗?也就是说只允许一个下划线?(对于玩家名字来说,这个要求不算过分;特别是相邻的下划线,其他玩家可能看起来会很费劲。)那么像“a_b_c”这样的名字就不符合要求了吗?

如果是这样的话:

if playerName and re.match("^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$", playerName):

条件的第一部分现在检查是否为空,这样可以简化正则表达式。

这并没有限制下划线出现的位置,所以像“_a”、“a_”和“_”这样的组合都会被匹配。如果你想要避免名字前后都有下划线,这对于玩家名字来说也是合理的,可以改成:

if re.match("^[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)?$", playerName):
// this regex doesn't match an empty string, so that check is unneeded
49

你的正则表达式只匹配一个字符。试试这个:

if re.match('^[a-zA-Z0-9_]+$',playerName): 
68

在Python中,有一个特别的符号 \w,它用来匹配字母、数字和下划线。当你没有指定 LOCALEUNICODE 这两个选项时,就可以使用这个符号。所以,你可以把你的模式改成这样:

pattern = '^\w+$'

撰写回答