#!/usr/bin/env python # -*- encoding: utf-8 -*- """ Topic: 简单的正则式搜索,包括分组捕获 Desc : 正则式例子 建议阅读Jeffrey E. F. Friedl编写的《精通正则表达式》 (Mastering Regular Expression) """ import re __author__ = 'Xiong Neng' def my_re(): # group示例 data = 'Thu' patt1 = r'^(\w{3})' m = re.match(patt1, data) print(m.group(1)) patt2 = r'^(\w){3}' m = re.match(patt2, data) print(m.group(1)) # 贪婪匹配 data = "Sat Mar 21 09:20:57 2009::spiepu@ovwdmrnuw.com::1237598457-6-9" # 获取最后的那三个连字符连起来的三个数, # 搜索比匹配更合适,因为不在开头 patt = r'\d+-\d+-\d+' print(re.search(patt, data).group()) # 打印出 1237598457-6-9 # 使用匹配,必须用到group patt = r'.+(\d+-\d+-\d+)' print(re.match(patt, data).group(1)) # 打印出 7-6-9,知道贪婪的厉害了吧。哈哈 # 接下来使用非贪婪操作符? patt = r'.+?(\d+-\d+-\d+)' print(re.match(patt, data).group(1)) # 打印出 1237598457-6-9 # 只获取三个数的中间那个数字: patt = r'-(\d+)-' print(re.search(patt, data).group()) # 打印-6- print(re.search(patt, data).group(1)) # 打印6 def my_pattern(): # (?ims) i表示忽略大小写,m表示多行模式,s表示.可以匹配所有字符,包括换行符 s = "This is a book, And Hello World!! Hello you World?" print(1, re.match(r'.*Hello', s).group()) # 匹配圆括号中的正则式,但丢弃匹配的子字符串 print(2, re.match(r'.*(?:Hello)', s).group()) # 分组名为haha print(3, re.match(r'.*(?PHello)', s).group()) # 注释,括号中内容被忽略 print(4, re.match(r'.*(?#Hello)', s).group()) # 只有在括号中的模式匹配时,才匹配前面的表达式 print(5, re.match(r'.*Hello (?=World)', s).group()) # 只有在括号中的模式不匹配时,才匹配前面的表达式 print(6, re.match(r'.*Hello (?!World)', s).group()) # 只有在括号中的模式匹配时,才匹配后面的表达式 print(7, re.match(r'.*(?<=Hello )World', s).group()) # 只有在括号中的模式不匹配时,才匹配后面的表达式 print(8, re.match(r'.*(?