匹配规则:
. 任何单个字符
[] 单个字符的取值范围 [^ ] 不取括号内的字符 * 前一个字符的0至任意次 + 前一个字符的1次至任意次 ? 前一字符的0或1次 | 左右表达式任意一个,相当于或运算 {m} 前一个字符M次 ab{2}c=abbc {m,n} 前一字符m至n次 ^ 字符串开头 $ 字符串结尾 () 分组标记,内部只能用|,(abc)=abc,(abc|aaa)=abc或aaa \d 数字,=[0-9], \d{m}=m个数字 \w 单字符,=[A-Za-z0-9] import re 原始字符串屏蔽反斜杠转义效果 r'\b'='\\b' 匹配一个单词边界, '\b' 退格 Re主要函数: match = re.search(pattern, string, flags=0) 匹配整个字符串,返回第一个符合的位置 pattern:正则表达式 string:待匹配字符串 flags:控制标记 .match(pattern, string, flags=0) 从字符串开头开始匹配正则,开头若不匹配则返回错误 .findall(pattern, string, flags=0) 返回所有匹配到的列表 .split(pattern, string, maxsplit=0, flags=0) 将匹配到的作为分隔符分割字符串 maxsplit最大分割数 .finditer(pattern, string, flags=0) 放回一个匹配结果的迭代类型 .sub(pattern, repl, string, count=0, flags=0) repl: 替换匹配后的字符串 count: 匹配的最大替换数量 a = re.search(r'pattern','string') 一次性匹配 b = re.compile(r'pattern') 面向对象方法:提前编译匹配内容后使用 a = b.search('string') 用b替代re,已经包含编译的规则,当使用量大时可以减小开支,加快运行速度 编译后可以使用re的全部函数 re匹配后返回match对象 match对象属性: .string 待匹配文本 .re 正则 .pos 文本匹配开始的位置 .endpos 文本匹配的结束位置 match对象的方法: .group(0) 获得匹配后的字符串 .start() 匹配到的字符串在原字符串中的开始位置 .end() 匹配到的字符串在原字符串中的结束位置 .span() 返回(.start(), .end()) 贪婪匹配: re默认采用这种匹配方式,即返回在复合匹配要求的最长字符串 r'a.*b' 'abcdbefbghdij' 将返回abcdbefb 在匹配规则中使用?改为最小匹配,r'a.*?b'返回ab, r'a.+?b'返回'abcdb'