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)