1. Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

举一个简单的例子,在寻找一个字符串中所有的英文字符: 

import re
pattern = re.compile('[a-zA-Z]')
result = pattern.findall('as3SiOPdj#@23awe')
print result
# ['a', 's', 'S', 'i', 'O', 'P', 'd', 'j', 'a', 'w', 'e']

2. re.sub 函数进行以正则表达式为基础的替换工作

    1. >>> import re  
    2. >>> re.search('[abc]', 'Mark')     
    3. <_sre.SRE_Match object at 0x001C1FA8>  
    4. >>> re.sub('[abc]', 'o', 'Mark')   
    5. 'Mork'  
    6. >>> re.sub('[abc]', 'o', 'rock')   
    7. 'rook'  
    8. >>> re.sub('[abc]', 'o', 'caps')   
    9. 'oops'

       Mark 包含 ab,或者 c吗?是的,含有 a

          好的,现在找出 ab,或者 c 并以 o 取代之。Mark 就变成 Mork 了。

          同一方法可以将 rock 变成 rook

          你可能认为它可以将 caps 变成 oaps,但事实并非如此。re.sub 替换所有 的匹配项,并不只是第一个匹配项。因此正则表达式将会把 caps 变成oops,因为 c 和 a 都被转换为 o了。

       re.sub的函数原型为:re.sub(pattern, repl, string, count)

      其中第二个函数是替换后的字符串;本例中为'-'

      第四个参数指替换个数。默认为0,表示每个匹配项都替换。 

    3. re.split

      可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

       re.findall

      re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);获取字符串中,包含'oo'的所有单词。  

        re.match的函数原型为:re.match(pattern, string, flags)

       第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;

       第二个参数表示要匹配的字符串;

       第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

    import re
       text = "JGood is a handsome boy, he is cool, clever, and so on..."
       m = re.match(r"(\w+)\s", text)
       if m:
       print m.group(0), '\n', m.group(1)
       else:
       print 'not match'

    4.  不同目录导入模块

    错误信息“ImportError: No module named 'fibo'”

    解决方法:在目录下新建空文件__init__.py 

    5. Python2.7中文不识别

    错误信息“SyntaxError: Non-ASCII character '\xc9'”

    解决方法:文件头#coding=gbk 

    6. with用法

    with conn:
        conn.execute("insert into sometable values (?,?)",("foo","bar"))
    在这个例子中,commit()是在所有with数据块中的语句执行完毕并且没有错误之后自动执行的,如果出现任何的异常,将执行rollback()操作,再次提示异常

     7.  Django模板错误

    错误信息:Requested setting TEMPLATE_DEBUG, but settings are not configured. You must either define

    解决方法:from django.conf import settings  
         settings.configure()   

    8. python 编码  

    decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:

    s2=’哈’.decode(‘utf-8′)

    这时,s2就是一个存储了’哈’字的unicode对象,其实就和unicode(‘哈’, ‘utf-8′)以及u’哈’是相同的。

    那么encode正好就是相反的功能,是将一个unicode对象转换为参数中编码格式的普通字符,比如下面代码:

    s3=unicode(‘哈’, ‘utf-8′).encode(‘utf-8′)

    s3现在又变回了utf-8的’哈’。 

    9. python编码 

    对于此(类)问题:

    (1)出现UnicodeEncodeError –> 说明是Unicode编码时候的问题;

    (2) ‘gbk’ codec can’t encode character –> 说明是将Unicode字符编码为GBK时候出现的问题;

    此时,往往最大的可能就是,本身Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符。

    解决办法是:

    • 方案1:

    在对unicode字符编码时,添加ignore参数,忽略无法无法编码的字符,这样就可以正常编码为GBK了。

    对应代码为:

    gbkTypeStr = unicodeTypeStr.encode(“GBK“, ‘ignore’);
    • 方案2:

    或者,将其转换为GBK编码的超集GB18030 (即,GBK是GB18030的子集):

    gb18030TypeStr = unicodeTypeStr.encode(“GB18030“);

    对应的得到的字符是GB18030的编码。

     对于上述中,将原先的utf-8的字符转换为Unicode的时候,其实更加安全的做法,也可以将:

    titleUni = titleHtml.decode(“UTF-8”);

    替换为:

    titleUni = titleHtml.decode(“UTF-8”, ‘ignore’);

    这样可以实现,即使对于那些,相对来说是无关紧要的一些特殊字符,也可以成功编码,避免编码出错,提高程序的健壮性。