智用指南
霓虹主题四 · 更硬核的阅读氛围

网络脚本编写中正则表达式的实用技巧

发布时间:2025-12-10 22:49:22 阅读:313 次

做网页抓取或者日志分析时,经常要从一堆杂乱的文本里找出邮箱、电话号或者特定链接。这时候手动去找不现实,写个脚本配合正则表达式就省事多了。

正则是什么?

简单说,正则表达式就是一种描述字符串规则的工具。比如你想找所有以 .com 结尾的网址,可以用 .+\.com$ 这样的模式去匹配。虽然一开始看着像天书,但用熟了会发现它特别趁手。

在脚本里怎么用?

拿 Python 举例,re 模块是处理正则的主力。比如要从一段 HTML 中提取所有的手机号,可以这样写:

import re

text = "联系我:13812345678 或者发邮件到 test@example.com"
phone_pattern = r'1[3-9]\d{9}'
phones = re.findall(phone_pattern, text)
print(phones)  # 输出: ['13812345678']

这里 1[3-9]\d{9} 的意思是:以 1 开头,第二位是 3 到 9 之间的数字,后面再跟 9 个数字,正好凑成 11 位手机号。

常用场景举例

平时写爬虫,经常遇到需要提取页面中的链接。比如从电商网站抓商品详情页地址,可以用下面这个模式:

html = '<a href="/product/123">商品1</a> <a href="/product/456">商品2</a>'
url_pattern = r'href="(/product/\d+)"'
urls = re.findall(url_pattern, html)
print(urls)  # 输出: ['/product/123', '/product/456']

再比如验证用户输入的邮箱格式是否合法,可以用:

email = "user@domain.com"
email_pattern = r'^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,}$'
if re.match(email_pattern, email):
    print("邮箱格式正确")

小技巧和避坑点

正则默认是贪婪匹配,比如 <.*> 会一口气匹配到最后一对尖括号。如果只想匹配第一个,记得加上 ? 变成非贪婪:<.*?>

还有就是特殊字符要转义。像点号 . 在正则里表示“任意字符”,如果真想匹配一个句点,得写成 \.。同理,斜杠、括号这些也别忘了加反斜杠。

调试的时候建议用在线工具,比如 regex101.com,边写边看匹配效果,比在代码里反复打印快得多。

正则不是万能的,遇到结构复杂的 HTML,还是交给 BeautifulSoup 这类解析器更稳妥。但它在做快速过滤、字段提取时,依然是脚本里的利器。