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

Python:匹配字母数字的正则表达式不起作用?,python,regex,Python,Regex,我想匹配一个字符串,是从一个网站输入,以检查是否是字母数字,可能包含一个下划线。 我的代码: 出于某种原因,这与疯狂的角色相匹配,例如:nIg○▲ ☆ ★ ◇ ◆ 我只需要常规的A-Z和0-9以及uu匹配,这里缺少什么吗?您的正则表达式只匹配一个字符。请尝试以下方法: if re.match('^[a-zA-Z0-9_]+$',playerName): Python有一个特殊的序列\w,用于在未指定区域设置和UNICODE标志时匹配字母数字和下划线。因此,您可以修改您的模式,如下所示: pa

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

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


我只需要常规的A-Z和0-9以及uu匹配,这里缺少什么吗?

您的正则表达式只匹配一个字符。请尝试以下方法:

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

Python有一个特殊的序列
\w
,用于在未指定
区域设置
UNICODE
标志时匹配字母数字和下划线。因此,您可以修改您的模式,如下所示:

pattern='^\w+$'

…检查是否为字母数字且可能包含下划线

你的意思是字面上的意思,所以只允许一个下划线,total?(对玩家名称来说并非不合理;尤其是相邻的下划线,其他玩家很难读懂。)“a_b__c”是否应该匹配

如果是:

if playerName and re.match("^[a-zA-Z0-9]*_?[a-zA-Z0-9]*$", playerName):
条件的新的第一部分检查空值,这简化了正则表达式

这不限制下划线出现的位置,因此所有“\u a”、“a\u”和“\u”都将匹配。相反,如果您希望防止使用前导下划线和尾随下划线,这同样适用于球员姓名,请更改为:

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

如果指定了区域设置或UNICODE怎么办?尚未选中,但它应该与指定区域设置的字母数字字符匹配。实际上,当您不想获取umlaut和其他字符时,这是问题的正确答案。
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