Python:正则表达式匹配字母数字不成功?
我想要检查从网站输入的字符串,看看它是否是字母和数字的组合,并且可能包含下划线。我的代码是:
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
,它用来匹配字母、数字和下划线。当你没有指定 LOCALE
和 UNICODE
这两个选项时,就可以使用这个符号。所以,你可以把你的模式改成这样:
pattern = '^\w+$'