re.sub(r'(\d*?\.\d\d[1-9]?)\d*',r'\1','1.25300046') 保留三位小数
re.sub(r'(\.\d\d(?>[1-9]?))\d+',r'\1','1.25300046') 保留三位小数 , (?>...)固化分组,固化分组中的备选状态会被抛弃,python不支持固化分组
re.sub(r'(\.\d\d[1-9]?+)\d+',r'\1','1.25300046') 保留三位小数,?+,*+,++,{m,n}+表示占有优先量词,和固化分组类似,占有优先量词从不交还已经匹配的字符,python不支持占有优先量词
re.sub(r'(\.\d\d(?=([1-9]?))\2)\d+',r'\1','1.25300046') 保留三位小数,使用肯定环视模拟固化分组
re.sub(r'(\.\d\d[1-9]|\.\d\d)\d+',r'\1',a) 保留三位小数,如果把多选分支中的顺序调换的话,表达式没有意义
re.match(r'^([0-9]+)(a)(?:[\t\n])?([0-9])','987a\t654') ?:表示非捕获型括号
b = re.match(r'(?P<num1>This) (?P<num2>is)','This is a test') b.group('num1') 命名捕获
re.match(r'^([0-9]+)(a)(?:[\s])?([0-9])','987A\t654',re.I) re.I 不区分大小写
re.sub(r'\bJeff','aaa','IJeff Jeffggg') \b单词分界符
re.sub(r'(?<=\bJeff)(?=s\b)',"'",'my name is Jeffs') (?=)肯定顺序环视,(?<=)肯定逆序环视
re.sub(r'(?<=\d)(?=(?:\d\d\d)+$)',",",'1234567890') (?=)肯定顺序环视,(?<=)肯定逆序环视
re.sub(r'(?<=\d)(?=(\d\d\d)+(?!\d))',',','tone of 12345Hz') (?!)否定顺序环视, (?<!)否定逆序环视
re.findall(r'((?i)a)','I AM a i am') ((?i)......) 括号内不区分大小写
re.sub(r'(is).*(a)',r'\1','This is a test') 反向引用
re.sub(r'(T.*?is)',r'zzzz','This is a test This is a test') 非贪婪模式
re.search(r'(?i)a(?i)*','aA').group() (?i).....(?i)某一部分不区分大小写