python学习之正则

前言

在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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章