用于检查字母数字的Python正则表达式

时间:2015-03-12 15:55:46

标签: python regex string python-2.7

我使用下面的正则表达式来检查字符串是否包含字母数字,但我得到的结果是无。

>>> r = re.match('!^[0-9a-zA-Z]+$','_')
>>> print r
None

3 个答案:

答案 0 :(得分:2)

!在RegEx中没有任何特殊含义,您需要使用^来否定匹配,就像这样

>>> re.match('^[^0-9a-zA-Z]+$','_')
<_sre.SRE_Match object; span=(0, 1), match='_'>

在Python 2.x中,

>>> re.match('^[^0-9a-zA-Z]+$','_')
<_sre.SRE_Match object at 0x7f435e75f238>

注意:只有当整个字符串中都包含非字母数字字符时,此RegEx才会为您提供匹配。

如果您想检查任何字符是否为非字母数字,那么您需要使用re.search并放弃+$,就像这样

>>> re.search('[^0-9a-zA-Z]', '123abcd!')
<_sre.SRE_Match object; span=(7, 8), match='!'>

这意味着在字符串中的任何位置查找0-9a-zA-Z以外的任何字符。 (re.match将尝试匹配字符串的开头。详细了解re.searchre.match here之间的差异。

注意:此问题的最佳解决方案是,使用str.isalnum,就像这样

>>> "123abcdABCD".isalnum()
True
>>> "_".isalnum()
False

仅当整个字符串中包含字母数字字符时,才会返回True。但是,如果您想查看字符串中的任何字符是否为字母数字,那么您需要使用any这样的函数

>>> any(char.isalnum() for char in "_!@#%^$()*")
False
>>> any(char.isalnum() for char in "_!@#%^a()*")
True

答案 1 :(得分:0)

那是因为"_"与正则表达式不匹配而且没有返回任何内容。你可以简单地使用

def contains_alphanumeric( input):
   r=re.match('[0-9a-zA-Z]+', input)
   if r==None:
      return False
   else:
      return True

答案 2 :(得分:0)

您没有提及您尝试对代码执行的操作,具体而言,但我是正则表达式的粉丝,并且经常在我的代码中使用它们。它可能比其他一些选项使用更多的CPU周期,但我确实喜欢这种灵活性。

如果您想单独查看每个字符,则会将表达式的结果与原始字符串进行比较:

import re

def main():
    data = "This is a @#%(*ing string."

    match = re.findall(re.compile(r"[a-z0-9]",re.IGNORECASE),data)

    if len(match) != len(data):
        print("Uh-oh, spaghettios!")
    else:
        print("All good in the hood.")

if __name__ == '__main__':
    main()

这将使用re.findall()来匹配表达式并返回结果列表。在此特定实例中,仅查找 字母数字字符:

>>> print(match)
['T', 'h', 'i', 's', 'i', 's', 'a', 'i', 'n', 'g', 's', 't', 'r', 'i', 'n', 'g']

请记住,&#34; []&#34;将被视为文字字符,除非使用范围,并且您可以使用&#34;()&#34;在re.match()中调用特定的结果组。

请不要犹豫,提出更多问题或者查看&#34; re&#34; https://docs.python.org/2/library/re.html

的模块信息