http://www.runoob.com/python/python-reg-expressions.html Python正则表达式
    比较详细Python正则表达式操作指南(re使用)
    这是 Perl 风格的正则表达式模式
    正则表达式(或 RE)是一种小型的、高度专业化的编程语言
    有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动机)
    象 * 这样地重复是“贪婪的” 贪婪匹配
    当重复一个 RE 时,匹配引擎会试着重复尽可能多的次数。如果模式的後面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。
    这证明了匹配引擎一开始会尽其所能进行匹配,如果没有匹配然後就逐步退回并反复尝试 RE 剩下来的部分。直到它退回尝试匹配 [bcd] 到零次为止,如果随後还是失败,那么引擎就会认为该字符串根本无法匹配 RE
    加个?就可以让\d+采用非贪婪匹配:
    . 代表任意一个字符

    • 它指定前一个字符可以被匹配零次或更多次
    • 它指定前一个字符可以被匹配一次及以上次数

    ? 它指定前一个字符可以被匹配一次或零次
    细心的读者也许注意到其他三个限定符都可以用这样方式来表示。
    {0,} 等同于 ,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 ,+,或?。很简单因为它们更短也再容易懂
    .*
    用()表示的就是要提取的分组(Group)
    注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串
    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配
    re.search 扫描整个字符串并返回第一个成功的匹配。
    切分字符串

    re.split(r’[\s,;]+’, ‘a,b;; c d’)

    [‘a’, ‘b’, ‘c’, ‘d’]
    编译
    如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配
    s=re.search(r’^ADAD’,path.read())
    print re.search(r’[SOFTWAREVERSION].[UPLOAD]’,data,re.S).group()
    #s=re.sub(r’CRC16.
    \n’, ‘CRC16=’+crc16_updatini, data)
    #print re.search(r’CRC16.\n’,data).group()
    print re.search(r’CRC16.
    \n’,data).group()
    print re.search(r’[FILE1].PATHTO=/opt/eqTerminalTmp/\r\nCRC16=\d{1,5}’,Update_raw,flags=re.S).group()
    data=re.sub(r’[FILE1].
    PATHTO=/opt/eqTerminalTmp/\r\nCRC16=\d{1,5}\r\n’,’ ‘,Update_raw,flags=re.S)