作为一个开发者,正则表达式是我们需要经常使用的,往常遇到总是直接百度网上的结果,最近由于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