Table:正则表达式
literal: 普通的逐字匹配.
"|": 该操做符具备延伸性(贪婪),例: at|home 匹配的是at或home,而不是t或h.
'.': 任意一个字符(不含\n)
"^": 匹配字符串起始部分
"$": 匹配字符串结束部分
"": 匹配0次或屡次前面出现的表达示,只对前一位有效(非延展),重复次数含前面的字符, 若是样本为:"aga23gaafa",那把表达式r"8"是能匹配到内容的,内容是NONE,由于这个表达式8若是按重复0次算自己就是NONE.
"+": 匹配1次或屡次前面出现的表达式,只对前一位有效(非延展),重复次数注意事项同上.
"?": 匹配0次或1次前面出现的表达式,只对前一位有效(非延展),重复次数注意事项同上.
"?": ?同时还被重载赋以另外一个含义: 当'?'用在闭合操做符后面,它将要求正则引擎尽量少的匹配. (和+是闭合操做符),如: 3+含义为: 3或33或333或3333..., 若是是3+?意思为: 3 (取最不贪婪的值,让"+"表明重复一次的含义).ide
"{N}": 匹配以前的字符N次, N次包含了前面字符自己(非延展).如: 53{2}就是匹配"533"的意思.
"{MN}": 匹配以前字符N-M次,其它同上.
"[...]": 匹配字符集内的任一字符.如:[mark]匹配m或a或r或k
"[x-y]": 匹配字符集内一个区间,如:[a-zA-Z]
"(...)": 封闭正则code
'\d': 任意十进制数, '\D'相反
'\w': 任意字母或数字(和[a-zA-Z0-9]赞成), '\W'相反
'\s': 匹配空格,tab等. '\S'相反.
'\b': 匹配单词边界,'\B'相反. 就是[a-zA-Z0-9]与[^a-zA-Z0-9]之间的边界内容.如:我但愿在字符串"give me the themometer"中匹配单词'the' 应该使用"\bthe\b".
'\N': 匹配己保存的子组.
'\charactor': 转义特殊字符为自己, "\?"就是?号自己.字符串
re module:
re.match(pattern,string,flag) //从字符串开始匹配
re.search(pattern,string,flag) //从字符串中间开始匹配(只匹配首次出现并符合条件的字符内容)input
matched object: m.group(index) //若是是参数index为0或无参数, 返回整个配置结果,若是index为>=1,则返回相应子组的配置内容. m.groups()以一个tuple的形式返回全部子组(子组做为tuple中的元素返回) re.findall(pattern,string,flag) //工做方式和search相同,可是返回一个list, 1.若是只成功匹配一次,那么全部子组为list中的元素. 2.若是屡次成功匹配,list由元组构成,每一次成功匹配是list中的一个tuple, 每个成功匹配的子组为List中的tuple中的元素. re.finditer(pattern,string,flag) //工做方式和search相同,可是返回内容为一个包含matched object的迭代器. re.sub(pattern,new_str,string) //使用new_str替代匹配pattern的string中的内容.返回值为替换后的string. re.subn(pattern,new_str,string) //工做内容和re.sub相同,返回值为一个包含2个元素的tuple, tuple[0]为替换后的新字符串, tuple[1]为替换的次数. 注: 可使用\N指定匹配的某子组做为替换内容.(N为pattern的子组编号) 例: re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})', r'\2/\1/\3', 2/20/1991),意思是把MM/DD/YYYY换成DD/MM/YYYY的时间格式. re.split(pattern,string) //使用pattern做为分隔符对原字符串进行分割,分割后的元素造成一个List并返回. 扩展符: (?i) //忽略大小写 (?m) //容许多行 (?=xxx) //正向前视断言, 要匹配的内容后边必须有xxx跟随. 例: "0 input errors, 0 CRC, 0 frame, 0 overrun, 0 " 若是我想匹配CRC以前的数字,但匹配内容不想含CRC, 那么pattern为 r'\d+(?=\sCRC)' (?!xxx) //负向前视断言, 要匹配的内容后边必须没有xxx跟随. (?<=xxx) //正向后视断言, 要匹配的内容前边必须有xxx. 例: 'MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec', 若是我想匹配BW以后的数字,但匹配内容不包含BW,那么pattern为 r'(?<=BW\s)\d+' (?<!xxx) //负向后视断言, 要匹配的内容前边必须没有xxx. 贪婪:正则表达式本质上实现贪婪,对于通配符模式,将对正则表达式从左至右按顺求值,而且试图获取尽量多的字符. 例:"abcdefghi1234-56-789" 若是Pattern为r'(\w+)(\d+-\d+-\d+)'那么group(1)的内容为:'abcdefghi123' group(2)内容为:'4-56-789', 结果可能不是咱们要的,可是由于贪婪原则,正则引擎为让(\w+)匹配更多内容. 非贪婪?: 能够在'+','*','?'以后使用非贪婪操做符'?'进行约束,要求尽量少匹配, 同上例: 若是咱们使用Pattern为: r'(\w+?)(\d+-\d+-\d+)', 那么group(1)匹配内容为:'abcdefghi', group(2)匹配内容为:'1234-56-789'. 可能更加符合预期.