我希望匹配从网站输入的字符串,以检查是否是字母数字,并且可能包含下划线。 我的代码:
if re.match('[a-zA-Z0-9_]',playerName):
# do stuff
出于某种原因,这与疯狂的角色相匹配,例如:nIg○▲☆★◇◆
我只想要常规的A-Z和0-9和_匹配,这里有什么我想念的吗?
答案 0 :(得分:36)
当没有指定\w
和LOCALE
标志时,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