Python正则匹配怎么做_re模块实战技巧【教程】

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

Python正则匹配怎么做_re模块实战技巧【教程】-第1张图片-佛山资讯网

Python正则匹配靠 re 模块,核心是写对模式(pattern),再选对方法(matchsearchfindall 等),不难但细节决定成败。

基础匹配:用好 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。

标签: python html ai 邮箱

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~