【问题标题】:Python: Regular expression to match alpha-numeric not working?Python:匹配字母数字的正则表达式不起作用?
【发布时间】:2011-06-11 00:21:38
【问题描述】:

我正在寻找匹配从网站输入的字符串以检查是否是字母数字并可能包含下划线。 我的代码:

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

由于某种原因,这与疯狂的字符匹配,例如:nIg○▲ ☆ ★ ◇ ◆

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

【问题讨论】:

    标签: python regex


    【解决方案1】:

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

    pattern = '^\w+$'

    【讨论】:

    • 如果指定了 LOCALE 或 UNICODE 怎么办?
    • 没有检查,但是应该匹配指定区域的字母数字字符。
    【解决方案2】:

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

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

    【讨论】:

    • 实际上,当您不想同时获得变音符号和其他字符时,这是问题的正确答案。
    【解决方案3】:

    …检查是否是字母数字并可能包含下划线。

    你的意思是字面意思,所以总共只允许一个下划线? (玩家名称并非不合理;尤其是相邻的下划线可能很难让其他玩家阅读。)“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多