Python正则匹配靠re模块,核心是写对pattern并选对方法;match从开头匹配,search全局扫描;需注意^$锁首尾、\b防误匹配、判空再group、分组提取、预编译提效、标志控制行为、转义特殊字符。

Python正则匹配靠 re 模块,核心是写对模式(pattern),再选对方法(match、search、findall 等),不难但细节决定成败。
基础匹配:用好 match 和 search
re.match() 只从字符串开头匹配,哪怕后面有符合的也不管;re.search() 扫描整个字符串,找到第一个就停。别混淆它们的定位逻辑。
- 验证手机号开头是 13–19:用
re.match(r'^1[3-9]\d{9}$', text)——^和$锁死首尾才叫“完整匹配” - 从日志里找 IP 地址:用
re.search(r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b', log_line),\b防止匹配到 192.168.1.1000 中的前段 - 匹配失败返回
None,务必先判空再调.group(),否则报AttributeError
提取内容:group 和 findall 是主力
带括号的子模式会捕获分组,.group(1) 就取第一个括号里的内容;findall 更省事——有分组就只返回分组内容,没分组才返回全部匹配串。
- 提取邮箱用户名:
re.search(r'(\w+)@(\w+\.\w+)', 'contact@py.org').group(1)→'contact' - 批量取所有邮箱:
re.findall(r'\b\w+@\w+\.\w+\b', text)直接得列表,不用循环 - 想同时拿到用户名和域名?用
re.findall(r'(\w+)@(\w+\.\w+)', text),返回[('user', 'domain.com'), ...]
进阶技巧:编译、标志和非贪婪
频繁使用的正则建议用 re.compile() 预编译,提升性能;re.I 忽略大小写,re.S 让 . 匹配换行符;默认是贪婪匹配,加 ? 变成非贪婪,比如 r'a.*?b' 匹配最短的 a…b。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~