前言
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re
正则用处很多,比如把爬取的数据抽取出来。
re模块操作
# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()
re模块示例(匹配以itcast开头的语句)
#coding=utf-8
import re
result = re.match("itcast","itcast.cn")
result.group()
运行结果为:
itcast
re.match() 能够匹配出以xxx开头的字符串
匹配单个字符
字符 | 功能 |
---|---|
. | 匹配任意一个字符(非\n) |
[] | 匹配[]里的字符 |
\d | 匹配0-9 |
\D | 匹配非0-9 |
\s | 匹配空白,即空格,tap键 |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-zA-Z 0-9 _ |
\W | 匹配非单词字符 |
说明:[]里面的字符不需要加逗号隔开,如果是连续的,比如说1,2,3,4可以写成,[1-4]
例子:
#coding=utf-8
import re
# 如果hello的首字符小写,那么正则表达式需要小写的h
ret = re.match("h","hello Python")
print(ret.group())
# 如果hello的首字符大写,那么正则表达式需要大写的H
ret = re.match("H","Hello Python")
print(ret.group())
# 大小写h都可以的情况
ret = re.match("[hH]","hello Python")
print(ret.group())
ret = re.match("[hH]","Hello Python")
print(ret.group())
ret = re.match("[hH]ello Python","Hello Python")
print(ret.group())
# 匹配0到9第一种写法
ret = re.match("[0123456789]Hello Python","7Hello Python")
print(ret.group())
# 匹配0到9第二种写法
ret = re.match("[0-9]Hello Python","7Hello Python")
print(ret.group())
ret = re.match("[0-35-9]Hello Python","7Hello Python")
print(ret.group())
# 下面这个正则不能够匹配到数字4,因此ret为None
ret = re.match("[0-35-9]Hello Python","4Hello Python")
# print(ret.group())
匹配多个字符
注意:匹配多个字符说的都是前
一个字符出现的次数或频率
例1
需求:匹配出,变量名是否有效
#coding=utf-8
import re
names = ["name1", "_name", "2_name", "__name__"]
for name in names:
ret = re.match("[a-zA-Z_]+[\w]*",name)
if ret:
print("变量名 %s 符合要求" % ret.group())
else:
print("变量名 %s 非法" % name)
运行结果:
变量名 name1 符合要求
变量名 _name 符合要求
变量名 2_name 非法
变量名 __ name __ 符合要求
匹配开头结尾
例子
需求:匹配163.com的邮箱地址
#coding=utf-8
import re
email_list = ["[email protected]", "[email protected]", "[email protected]"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com", email)
if ret:
print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)
运行结果:
[email protected] 是符合规定的邮件地址,匹配后的结果是:[email protected]
[email protected] 是符合规定的邮件地址,匹配后的结果是:[email protected]
[email protected] 不符合要求
完善后:
email_list = ["[email protected]", "[email protected]", "[email protected]"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com$", email)
if ret:
print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)