匹配单个字符

在上一小节中,了解到通过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 正则表达式匹配相关推荐

  1. python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...

    这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...

  2. Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

  3. 转载Python正则表达式匹配反斜杠'\'问题(——字符串转义与正则转义)

    个人总结(非转载部分): 1.原始字串(字符串前加r,如r'xxx')常用在正则表达式中,在正则表达运算中,要进行正则转义(原始字串不原始) 实例: 2.普通字串若要用于正则表达式中,会先进行&quo ...

  4. python正则表达式匹配字符串相关方法

    python正则表达式匹配字符串相关方法 一.匹配方法简要介绍及注意事项 1.贪婪匹配与非贪婪匹配 2.findall与search的选取问题 3.匹配时"()"和"[] ...

  5. Python正则表达式匹配数字和小数

    Python正则表达式匹配数字和小数 1.匹配数字 import restr_date = 'hello world today is 2022.4.15 ok' num_list = re.find ...

  6. python - 正则表达式匹配汉字

    python - 正则表达式匹配汉字 Unicode 编码中汉字编码的范围在 \u4e00 到 \u9fa5之间 所以 匹配任意汉字: [\u4e00-\u9fa5] 匹配某个汉字可以把汉字转换成Un ...

  7. 【python正则表达式匹配获取文本中的11位手机号码】

    [python正则表达式匹配获取文本中的11位手机号码] 文前白话 代码实现 效果 正则知识补充 文前白话 根据需要,匹配一段没有固定格式的文本,识别其中的11位数字作为手机号,如果11位数字后还有数 ...

  8. Python正则表达式匹配中文

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 参照Py ...

  9. python 正则表达式-匹配规则

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...

  10. python正则表达式匹配中文汉字

    原文链接:python使用正则表达式匹配中文汉字 python正则匹配汉字,用来计算汉字字数,有两种方法: 1 [\u4e00-\u9fa5] 2 [^\x00-\xff] 两种匹配方式的区别: [\ ...

最新文章

  1. SpringMVC注解整理
  2. (013)java后台开发之Mac系统安装和配置tomcat步骤详解
  3. IE9 CSS 因 Mime 类型不匹配而被忽略“问题
  4. Android逆向笔记-使用Android Studio调试Smali代码(方式二)
  5. 构建一套高逼格 Nginx 集群监控系统!
  6. 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测
  7. 《Python绝技:运用Python成为顶级黑客》 用Python进行取证调查
  8. 软件测试 黑盒白盒测试方法总结
  9. python 中self
  10. php6 xml,thinkphp6 常用方法文档
  11. Android Service完全解析,关于服务你所需知道的一切(下) (转载)
  12. JavaScript:Boolean对象
  13. 计算机excel2010完整教程视频,刘伟公益课-Excel2010基础大全(1-66集)视频教程-高清版...
  14. VS2003 搜索直接导致卡死问题
  15. python使用matplotlib超全画图
  16. silvaco的石墨烯fet仿真_添加不到1‰,碳纤维强度蹭蹭往上提!《Science Advances》:添加少量石墨烯可大幅度提高碳纤维强度...
  17. 个人银行账户管理程序【简化】
  18. Chrome安装CRX插件方法
  19. Android的屏幕适配
  20. VSCode快速生成HTML基础模板--输入!一键快捷生成--无法自动生成的解决办法

热门文章

  1. 这么多嵌入式设计创意,哪个你曾想过?
  2. 网管型交换机和非网管型交换机的区别
  3. 河北工业大学c语言寻宝游戏,计算机技术基础(c语言)课程设计寻宝游戏.doc
  4. ROS同时订阅多个话题 Python
  5. Linux的判断两个字符串是否相等
  6. v-if判断字符串是否相等
  7. CHM文件无法打开的解决方法
  8. 程序员必备的17个软件开发工具,你常用的有几个?
  9. not marked as ignorable
  10. 数据库连接不上的几种情况