python 正则表达式匹配
匹配单个字符
在上一小节中,了解到通过re模块能够完成使用正则表达式来匹配字符串
本小节,将要讲解正则表达式的单字符匹配
示例1: .
#coding=utf-8import reret = re.match(".","M")
print(ret.group())ret = re.match("t.o","too")
print(ret.group())ret = re.match("t.o","two")
print(ret.group())
运行结果:
M
too
two
示例2:[ ]
#coding=utf-8import 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())
运行结果:
h
H
h
H
Hello Python
7Hello Python
7Hello Python
7Hello Python
示例3:\d
#coding=utf-8import re# 普通的匹配方式
ret = re.match("嫦娥1号","嫦娥1号发射成功")
print(ret.group())ret = re.match("嫦娥2号","嫦娥2号发射成功")
print(ret.group())ret = re.match("嫦娥3号","嫦娥3号发射成功")
print(ret.group())# 使用\d进行匹配
ret = re.match("嫦娥\d号","嫦娥1号发射成功")
print(ret.group())ret = re.match("嫦娥\d号","嫦娥2号发射成功")
print(ret.group())ret = re.match("嫦娥\d号","嫦娥3号发射成功")
print(ret.group())
运行结果:
嫦娥1号
嫦娥2号
嫦娥3号
嫦娥1号
嫦娥2号
嫦娥3号
说明
其他的匹配符参见后面章节的讲解
匹配多个字符
匹配多个字符的相关格式
示例1:*
需求:匹配出,一个字符串第一个字母为大小字符,后面都是小写字母并且这些小写字母可有可无
#coding=utf-8
import reret = re.match("[A-Z][a-z]*","M")
print(ret.group())ret = re.match("[A-Z][a-z]*","MnnM")
print(ret.group())ret = re.match("[A-Z][a-z]*","Aabcdef")
print(ret.group())
运行结果:
M
Mnn
Aabcdef
示例2:+
需求:匹配出,变量名是否有效
#coding=utf-8
import renames = ["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__ 符合要求
示例3:?
需求:匹配出,0到99之间的数字
#coding=utf-8
import reret = re.match("[1-9]?[0-9]","7")
print(ret.group())ret = re.match("[1-9]?\d","33")
print(ret.group())ret = re.match("[1-9]?\d","09")
print(ret.group())
运行结果:
7
33
0 # 这个结果并不是想要的,利用$才能解决
示例4:{m}
需求:匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
#coding=utf-8
import reret = re.match("[a-zA-Z0-9_]{6}","12a3g45678")
print(ret.group())ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
print(ret.group())
运行结果:
12a3g4
1ad12f23s34455ff66
匹配开头结尾
示例1:$
需求:匹配163.com的邮箱地址
#coding=utf-8import reemail_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei", ".com.xiaowang@qq.com"]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)
运行结果:
xiaoWang@163.com 是符合规定的邮件地址,匹配后的结果是:xiaoWang@163.com
xiaoWang@163.comheihei 是符合规定的邮件地址,匹配后的结果是:xiaoWang@163.com
.com.xiaowang@qq.com 不符合要求
完善后
email_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei", ".com.xiaowang@qq.com"]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)
运行结果:
xiaoWang@163.com 是符合规定的邮件地址,匹配后的结果是:xiaoWang@163.com
xiaoWang@163.comheihei 不符合要求
.com.xiaowang@qq.com 不符合要求
匹配分组
示例1:|
需求:匹配出0-100之间的数字
#coding=utf-8import reret = re.match("[1-9]?\d","8")
print(ret.group()) # 8ret = re.match("[1-9]?\d","78")
print(ret.group()) # 78# 不正确的情况
ret = re.match("[1-9]?\d","08")
print(ret.group()) # 0# 修正之后的
ret = re.match("[1-9]?\d$","08")
if ret:print(ret.group())
else:print("不在0-100之间")# 添加|
ret = re.match("[1-9]?\d$|100","8")
print(ret.group()) # 8ret = re.match("[1-9]?\d$|100","78")
print(ret.group()) # 78ret = re.match("[1-9]?\d$|100","08")
# print(ret.group()) # 不是0-100之间ret = re.match("[1-9]?\d$|100","100")
print(ret.group()) # 100
示例2:( )
需求:匹配出163、126、qq邮箱
#coding=utf-8import reret = re.match("\w{4,20}@163\.com", "test@163.com")
print(ret.group()) # test@163.comret = re.match("\w{4,20}@(163|126|qq)\.com", "test@126.com")
print(ret.group()) # test@126.comret = re.match("\w{4,20}@(163|126|qq)\.com", "test@qq.com")
print(ret.group()) # test@qq.comret = re.match("\w{4,20}@(163|126|qq)\.com", "test@gmail.com")
if ret:print(ret.group())
else:print("不是163、126、qq邮箱") # 不是163、126、qq邮箱
不是以4、7结尾的手机号码(11位)
import retels = ["13100001234", "18912344321", "10086", "18800007777"]for tel in tels:ret = re.match("1\d{9}[0-35-68-9]", tel)if ret:print(ret.group())else:print("%s 不是想要的手机号" % tel)
提取区号和电话号码
>>> ret = re.match("([^-]*)-(\d+)","010-12345678")
>>> ret.group()
'010-12345678'
>>> ret.group(1)
'010'
>>> ret.group(2)
'12345678'
*示例3:*
需求:匹配出hh
#coding=utf-8import re# 能够完成对正确的字符串的匹配
ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</html>")
print(ret.group())# 如果遇到非正常的html格式字符串,匹配出错
ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</htmlbalabala>")
print(ret.group())# 正确的理解思路:如果在第一对<>中是什么,按理说在后面的那对<>中就应该是什么# 通过引用分组中匹配到的数据即可,但是要注意是元字符串,即类似 r""这种格式
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
print(ret.group())# 因为2对<>中的数据不一致,所以没有匹配出来
test_label = "<html>hh</htmlbalabala>"
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", test_label)
if ret:print(ret.group())
else:print("%s 这是一对不正确的标签" % test_label)
运行结果:
<html>hh</html>
<html>hh</htmlbalabala>
<html>hh</html>
<html>hh</htmlbalabala> 这是一对不正确的标签
示例4:\number
需求:匹配出
www.itcast.cn
#coding=utf-8import relabels = ["<html><h1>www.itcast.cn</h1></html>", "<html><h1>www.itcast.cn</h2></html>"]for label in labels:ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)if ret:print("%s 是符合要求的标签" % ret.group())else:print("%s 不符合要求" % label)
运行结果:
<html><h1>www.itcast.cn</h1></html> 是符合要求的标签
<html><h1>www.itcast.cn</h2></html> 不符合要求
示例5:(?P) (?P=name)
需求:匹配出
www.itcast.cn
#coding=utf-8import reret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
ret.group()ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h2></html>")
ret.group()
注意:(?P)和(?P=name)中的字母p大写
运行结果:
python 正则表达式匹配相关推荐
- python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...
这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...
- Python正则表达式匹配字符串中的数字
导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...
- 转载Python正则表达式匹配反斜杠'\'问题(——字符串转义与正则转义)
个人总结(非转载部分): 1.原始字串(字符串前加r,如r'xxx')常用在正则表达式中,在正则表达运算中,要进行正则转义(原始字串不原始) 实例: 2.普通字串若要用于正则表达式中,会先进行&quo ...
- python正则表达式匹配字符串相关方法
python正则表达式匹配字符串相关方法 一.匹配方法简要介绍及注意事项 1.贪婪匹配与非贪婪匹配 2.findall与search的选取问题 3.匹配时"()"和"[] ...
- Python正则表达式匹配数字和小数
Python正则表达式匹配数字和小数 1.匹配数字 import restr_date = 'hello world today is 2022.4.15 ok' num_list = re.find ...
- python - 正则表达式匹配汉字
python - 正则表达式匹配汉字 Unicode 编码中汉字编码的范围在 \u4e00 到 \u9fa5之间 所以 匹配任意汉字: [\u4e00-\u9fa5] 匹配某个汉字可以把汉字转换成Un ...
- 【python正则表达式匹配获取文本中的11位手机号码】
[python正则表达式匹配获取文本中的11位手机号码] 文前白话 代码实现 效果 正则知识补充 文前白话 根据需要,匹配一段没有固定格式的文本,识别其中的11位数字作为手机号,如果11位数字后还有数 ...
- Python正则表达式匹配中文
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 参照Py ...
- python 正则表达式-匹配规则
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...
- python正则表达式匹配中文汉字
原文链接:python使用正则表达式匹配中文汉字 python正则匹配汉字,用来计算汉字字数,有两种方法: 1 [\u4e00-\u9fa5] 2 [^\x00-\xff] 两种匹配方式的区别: [\ ...
最新文章
- SpringMVC注解整理
- (013)java后台开发之Mac系统安装和配置tomcat步骤详解
- IE9 CSS 因 Mime 类型不匹配而被忽略“问题
- Android逆向笔记-使用Android Studio调试Smali代码(方式二)
- 构建一套高逼格 Nginx 集群监控系统!
- 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测
- 《Python绝技:运用Python成为顶级黑客》 用Python进行取证调查
- 软件测试 黑盒白盒测试方法总结
- python 中self
- php6 xml,thinkphp6 常用方法文档
- Android Service完全解析,关于服务你所需知道的一切(下) (转载)
- JavaScript:Boolean对象
- 计算机excel2010完整教程视频,刘伟公益课-Excel2010基础大全(1-66集)视频教程-高清版...
- VS2003 搜索直接导致卡死问题
- python使用matplotlib超全画图
- silvaco的石墨烯fet仿真_添加不到1‰,碳纤维强度蹭蹭往上提!《Science Advances》:添加少量石墨烯可大幅度提高碳纤维强度...
- 个人银行账户管理程序【简化】
- Chrome安装CRX插件方法
- Android的屏幕适配
- VSCode快速生成HTML基础模板--输入!一键快捷生成--无法自动生成的解决办法