Python:正则表达式匹配字母数字不起作用?

时间:2011-01-18 10:31:14

标签: python regex

我希望匹配从网站输入的字符串,以检查是否是字母数字,并且可能包含下划线。 我的代码:

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

出于某种原因,这与疯狂的角色相匹配,例如:nIg○▲☆★◇◆

我只想要常规的A-Z和0-9和_匹配,这里有什么我想念的吗?

3 个答案:

答案 0 :(得分:36)

当没有指定\wLOCALE标志时,Python有一个特殊的序列UNICODE用于匹配字母数字和下划线。所以你可以修改你的模式,

pattern = '^\w+$'

答案 1 :(得分:24)

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

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

答案 2 :(得分:1)

  

...检查是否为字母数字,可能包含下划线。

你的意思是字面意思,所以只允许一个下划线,总数? (对于玩家名称来说并不合理;特别是相邻的下划线对于其他玩家来说很难阅读。)“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