优购物官方网站女鞋附近图文广告公司电话
2026/1/12 21:24:18 网站建设 项目流程
优购物官方网站女鞋,附近图文广告公司电话,网站服务器的采购方案,wordpress 加速乐 wptouch在Python编程中#xff0c;正则表达式#xff08;Regular Expression#xff0c;简称regex#xff09;是处理字符串的瑞士军刀。无论是数据清洗、日志分析#xff0c;还是爬虫开发#xff0c;正则表达式都能以简洁高效的方式解决复杂字符串匹配问题。本文通过20个真实场景…在Python编程中正则表达式Regular Expression简称regex是处理字符串的瑞士军刀。无论是数据清洗、日志分析还是爬虫开发正则表达式都能以简洁高效的方式解决复杂字符串匹配问题。本文通过20个真实场景案例带你快速掌握正则表达式的核心用法。一、基础验证场景1. 邮箱地址验证import re def validate_email(email): pattern r^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$ return bool(re.match(pattern, email)) print(validate_email(testexample.com)) # True print(validate_email(invalid.email)) # False关键点^和$确保从头到尾匹配[a-zA-Z0-9._%-]匹配用户名部分\.转义点号{2,}要求顶级域名至少2个字符。2. 手机号码校验中国大陆def validate_phone(phone): pattern r^1[3-9]\d{9}$ return bool(re.match(pattern, phone)) print(validate_phone(13800138000)) # True print(validate_phone(12345678901)) # False技巧1[3-9]匹配运营商号段\d{9}匹配剩余9位数字总长度固定11位。3. 密码强度检测def validate_password(password): pattern r^(?.*[a-z])(?.*[A-Z])(?.*\d)(?.*[$!%*?])[A-Za-z\d$!%*?]{8,20}$ return bool(re.match(pattern, password)) print(validate_password(StrongPass1!)) # True print(validate_password(weakpass)) # False原理(?...)是正向预查确保同时包含大小写字母、数字和特殊字符{8,20}限制长度。二、数据提取场景4. 从文本提取所有数字text 订单号: 2023A001, 金额: 128.50 numbers re.findall(r\d\.?\d*, text) print(numbers) # [2023, 001, 128.50]扩展若需提取整数改用r\b\d\b提取小数用r\d\.\d。5. 抓取网页URLhtml a hrefhttps://example.com链接/a img srcimage.png urls re.findall(rhref(https?://[^]), html) print(urls) # [https://example.com]优化添加re.IGNORECASE标志可匹配HTTP和HTTPS混合大小写情况。6. 解析日志文件log 2023-10-01 12:00:00 ERROR: Disk full match re.search(r(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) (\w): (.), log) if match: print(f日期: {match.group(1)}, 时间: {match.group(2)}, 级别: {match.group(3)}, 内容: {match.group(4)})输出日期: 2023-10-01, 时间: 12:00:00, 级别: ERROR, 内容: Disk full三、文本处理场景7. 敏感词过滤def censor_text(text, bad_words): pattern |.join(map(re.escape, bad_words)) return re.sub(pattern, ***, text) text 这个产品太糟糕了服务态度极差 print(censor_text(text, [糟糕, 极差])) # 这个产品太***了服务态度***注意re.escape自动转义特殊字符避免正则语法错误。8. 拆分复合分隔符data 苹果|香蕉,橙子;西瓜 items re.split(r[|,;], data) print(items) # [苹果, 香蕉, 橙子, 西瓜]应用场景处理CSV文件或用户自定义分隔符的数据。9. 删除多余空格text This is a messy sentence. cleaned re.sub(r\s, , text).strip() print(cleaned) # This is a messy sentence.进阶结合re.compile()预编译模式提升性能space_pattern re.compile(r\s) cleaned space_pattern.sub( , text).strip()四、高级匹配技巧10. 非贪婪匹配html p第一段/pp第二段/p content re.findall(rp(.*?)/p, html, re.DOTALL) print(content) # [第一段, 第二段]对比贪婪模式.*会匹配整个字符串非贪婪模式.*?在遇到第一个/p时停止。11. 条件匹配区分邮箱类型emails [eduexample.edu, bizexample.biz] for email in emails: match re.search(r(\w)(edu|biz)\., email) if match: print(f{email} 是{match.group(2)}邮箱)输出eduexample.edu 是edu邮箱 bizexample.biz 是biz邮箱12. 提取重复字符text 1122334455 repeats re.findall(r(\d)\1, text) print(repeats) # [1, 2, 3, 4, 5]原理(\d)捕获数字\1引用第一个分组匹配一次或多次重复。五、实战案例集锦13. 身份证号校验简易版def validate_id_card(id_card): pattern r^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$ return bool(re.match(pattern, id_card)) print(validate_id_card(11010519991231003X)) # True说明该模式验证18位身份证号包含地区码、出生日期和校验位。14. 提取中文段落text Hello 你好世界This is a test. chinese re.findall(r[\u4e00-\u9fa5], text) print(chinese) # [你好, 世界]扩展匹配中文标点r[\u4e00-\u9fa5。、]15. 爬虫代理IP格式校验def validate_proxy(proxy): pattern r^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}$ return bool(re.match(pattern, proxy)) print(validate_proxy(192.168.1.1:8080)) # True print(validate_proxy(256.300.1.1:99999)) # False注意实际IP范围需更严格校验此处仅演示格式。六、性能优化建议预编译模式频繁使用的正则表达式应预编译date_pattern re.compile(r^\d{4}-\d{2}-\d{2}$) date_pattern.match(2023-10-01)避免过度捕获非必要不使用括号分组减少re.sub的回调函数开销。选择合适方法只需判断是否存在匹配 →re.search()需要所有匹配结果 →re.findall()需要替换文本 →re.sub()处理大文件逐行读取文件并匹配避免一次性加载全部内容。常见问题QAQ2如何匹配中文和英文混合字符串中的中文部分A使用Unicode范围匹配text Python编程 Python Programming chinese re.findall(r[\u4e00-\u9fa5], text) print(chinese) # [编程]Q3正则表达式匹配效率低如何优化A避免嵌套量词如(a)使用非贪婪模式替代贪婪模式限制重复次数范围如{3,6}优于*对固定字符串使用re.escape()转义后直接匹配Q4如何提取HTML标签间的文本A非贪婪模式匹配html div标题/divp内容/p texts re.findall(r(.*?)/, html) print(texts) # [标题, 内容]Q5正则表达式能匹配二进制数据吗A不能直接匹配但可先解码为字符串如UTF-8或使用bytes类型正则Python 3中需加b前缀binary_data b\x48\x65\x6c\x6c\x6f pattern bHello match re.search(pattern, binary_data)通过掌握这些核心场景和优化技巧你已具备解决80%以上字符串处理问题的能力。正则表达式的精髓在于用简洁的语法描述复杂规则建议通过实际项目不断练习最终达到看字符串即写正则的境界。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询