作为一个开发者,正则表达式是我们需要经常使用的,往常遇到总是直接百度网上的结果,最近由于python爬虫的学习,需要经常使用正则表达式,今天正好认真学一下。
特殊字符
| 字符 | 描述 |
|---|---|
| ^ | 以什么开始 |
| $ | 以什么结尾 |
| . | 代表任意单个字符 |
| + | 代表最少出现一次 |
| * | 代表前面字符可任意长度 |
| ? | 代表非贪婪模式 |
| | | 代表或 |
| {2} | 代表前面字符出现的次数(即2次) |
| {2,} | 代表前面字符出现的次数(即大于2次) |
| {2,5} | 代表前面字符出现的次数(即大于等于2次小于等于5次) |
| ( ) | 代表一个子表达式 |
| [123] | 代表其中任意之一(即1或2或3都可以) |
| [0-9] | 代表区间(即0到9都可以) |
| [^1] | 代表不为1 |
| \s | 代表一个空格 |
| \S | 代表不是一个空格 |
| \d | 匹配一个数字字符。等价于 [0-9]。 |
| \D | 匹配一个非数字字符。等价于 [^0-9]。 |
| \w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’ |
| \W | 匹配非字母、数字、下划线。等价于’[^A-Za-z0-9_]’ |
实例:
匹配邮箱
分析:一个邮箱的格式大致是这个样子: *****@***.*** 即分为5部分,
| ***** | @ | *** | . | *** |
|---|
"""
第一部分:可以是任意数字、字母、下划线,且至少出现一次,毕竟 @ 前不能为空吧,即:^\w+
第二部分:只有一个@,即:[@]
第三部分:可以是任意数字、字母、下划线,且至少出现一次,毕竟 @ 后不能直接是 . 吧,即:\w+
第四部分:只有一个 . ,即:[.]
第五部分:一般来说域名都是字母,且至少出现两次(com、cn,不可能为一个字母),即:[a-z]{2,}$
合起来就是:“^\w+[@]\w+[.][a-z]{2,}$”
"""
import re
line = '123@163.com'
regex_str = '^\w+[@]\w+[.][a-z]{2,}$'
match_obj = re.match(regex_str,line)
if match_obj:
print("yes")
pass
"""
也有可能邮箱最后面是一个二级域名:abc123@qq.com.cn,那么
第一部分:可以是任意数字、字母、下划线,且至少出现一次,毕竟 @ 前不能为空吧,即:^\w+
第二部分:只有一个@,即:[@]
第三部分:可以是任意数字、字母、下划线,且至少出现一次,毕竟 @ 后不能直接是 . 吧,即:\w+
第四、五部分:因为可能有两个以上的 . ,所以将上面的四五合起来匹配至少一次即可,即 ([.]([a-z]{2,}))+$
合起来就是:“^\w+[@]\w+([.]([a-z]{2,}))+$”
"""
line1 = '123@163.com.cn'
regex_str1 = '^\w+[@]\w+([.][a-z]{2,})+$'
match_obj1 = re.match(regex_str1,line1)
if match_obj1:
print("yes")
pass
本文深入解析正则表达式的特殊字符及模式,通过实例演示如何使用正则表达式匹配电子邮件地址,适用于Python爬虫数据提取。
274

被折叠的 条评论
为什么被折叠?



