首页 > 编程语言 >python基础day21 正则表达式和re模块

python基础day21 正则表达式和re模块

时间:2023-06-08 15:01:00浏览次数:42  
标签:字符 匹配 python res day21 re print group

 

正则表达式的介绍

他是一门独立的语言,跟python等的语言没有任何的关系,但是其他语言可以使用正则表达式来做一些功能,主要是用来筛选数据的

^(13|14|15|18)[0-9]{9}$

形如上述代码的就是正则表达式

什么是正则表达式:

  利用一些特殊符号匹配出想要的数据就是正则表达式,简称正则

字符组

[0123456789] # 匹配0-9之间的数字
[0-9]        # 匹配0-9之间的数字
\d            # 匹配0-9之间的数字
[a-z]        # 匹配a-z之间的字符
[A-Z]        # 匹配A-Z之间的字符

# 匹配0-9a-zA-Z如何写
[0123456789ABCDEFGHIJ...abcdefghij...]
[0-9A-Za-z]

字符

.     匹配除换行符以外的任意字符     # 掌握
\w    匹配字母或数字或下划线            # 掌握
\s    匹配任意的空白符
\d    匹配数字                    # 掌握
\n    匹配一个换行符                    # 掌握
\t    匹配一个制表符
\b    匹配一个单词的结尾
^    匹配字符串的开始            # 掌握
$    匹配字符串的结尾            # 掌握
\W    匹配非字母或数字或下划线
\D    匹配非数字
\S    匹配非空白符
a|b    匹配字符a或字符b                # 掌握
()    匹配括号内的表达式,也表示一个组    
[...]    匹配字符组中的字符            # 掌握
[^...]    匹配除了字符组中字符的所有字符    # 掌握

量词

1. 量词只能影响前面的一个字符
2. 量词不能单独使用,必须配合其他字符串使用
*    重复零次或更多次
+    重复一次或更多次
?    重复零次或一次
{n}    重复n次
{n,}    重复n次或更多次
{n,m}    重复n到m次

贪婪匹配和非贪婪匹配

# 待匹配的字符
<script>123</script>

# 正则表达式是:
<.*>

# 匹配结果是:
<script>
<script>123</script>

# 默认匹配的是贪婪匹配:尽可能的多匹配
'''把贪婪匹配转为非贪婪匹配'''
<.*?> # 非贪婪匹配尽可能的少匹配

.*?组合的用法

小练习

^[1-9]\d{13,16}[0-9x]$
^[1-9]\d{13,16}[0-9x]$
^[1-9]\d{14}(\d{2}[0-9x])?$
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

# 由于正则表达式的复杂性,所以,以后遇到常见的匹配规则,我们就去百度搜
1. 写一个匹配常见的手机号的正则
^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$

转义字符

'\\\\\\\\n'
\\\\\\\\\\\\\\\\n
'\t'
\\t
'''一个斜杠只能转义一个字符'''


# 在python中转义字符推荐使用:r'\n' '\\n'  =====》 

re模块

1. re是内置的模块,可以直接使用
2. 在python中,要想使用正则需要借助于re模块
re: regular express
import re

# re.findall('这是正则表达式', '待匹配的文件')

# res=re.findall('b', 'eva jason kavin')
# print(res)  # ['a', 'a', 'a']
# 如果匹配不到字符,就返回空列表[]

# res=re.search('b', 'eva jason kavin')
# print(res)
# print(res.group())

"""如果匹配不到,就返回None"""
# if res:
#     print(res.group())
# else:
#     print('没有匹配到')

# try:
#     print(res.group())
# except Exception:
#     print('没有找到')


res=re.match('a', 'aeva jason kavin')  # 从开头开始匹配
print(res)
print(res.group())

分组

# 分组相关

# res = re.search('^[1-9](\d{14})(\d{2}[0-9x]?)$','110105199812067023')
# print(res)
# print(res.group())
# print(res.group(1))
# print(res.group(2))

# 无名分组

# 对于findall,它具有分组优先展示, 也称之为是无名分组
# res = re.findall('^[1-9]\d{14}(?:\d{2}[0-9x]?)$','110105199812067023')
# print(res)  # ['023']


# 有名分组

res = re.search('^[1-9]\d{14}(?P<month>\d{2}[0-9x]?)$','110105199812067023')
print(res)
# print(res.group(1))
print(res.group())
print(res.group(1))
print(res.group('month'))

 

标签:字符,匹配,python,res,day21,re,print,group
From: https://www.cnblogs.com/zfq132/p/17466495.html

相关文章

  • redis应用场景--记录文章,图文,或者视频的浏览次数
    在阅读博客文章时,你可以看到一篇文章被阅读的次数,如果使用mysql,那么在设计article表时,就必须设置一个view_count字段来记录这篇文章被阅读的次数。但这种方式相比于使用redis,并不是一种好的办法,原因在于,每次更新view_count字段的值都是一个比较费力的过程。首先,程序需要根据文......
  • redis应用场景--实现布隆过滤器
    简述布隆过滤器的实现思路:假设有一个长度为n的比特数组,bit_array,数组里的每一位都是0,对于一个url或者是其他数据,使用hash算法计算出url的散列值,这个散列值当然是一个整数,暂且命名为index,index=index%n,确保index的值小于n,查看bit_array[index]是否等于1,如果等于1,表示该url已......
  • org.springframework.data.redis.RedisSystemException: Redis exception; nested exc
    springBoot+redis.程序隔一段时间会莫名其妙的报Redis的错误.报错如下:org.springframework.data.redis.RedisSystemException:Redisexception;nestedexceptionisio.lettuce.core.RedisException:java.io.IOException:Connectionresetbypeer百度得知说:是因为re......
  • redis应用场景--游戏排行榜
    有序集合也是集合,不同之处在于,集合里的元素可以附带这个分数,元素不能重复,但是分数可以重复,不仅如此,还可以根据分数进行排序。很多游戏都有玩家得分的排行榜,这个排行榜随时处于变动中。游戏有很多玩家,可以设计一张表,记录每一个玩家的分数,并根据玩家新一局的分数来更新这张表,当需......
  • python Tesseract 图片识别文字
    Python识别图片中的文字(zhihu.com)超详细解决pytesseract.pytesseract.TesseractNotFoundError:tesseractisnotinstalledorit'snotinyo...-简书(jianshu.com)......
  • Re: finding all cycles in a graph
    ref:https://cs.stackexchange.com/questions/7216/find-the-simple-cycles-in-a-directed-graphRe:findingallcyclesinagraphFrom: JuanPabloCarbajalSubject: Re:findingallcyclesinagraphDate: Wed,25Jan201219:43:48+0100OnWed,Jan25,2012a......
  • 在 macOS Catalina 10.15 搭建 PHP 开发环境包括PHP的redis扩展
    2019年10月8日,苹果公司正式发布了新一代macOS,版本为Catalina(11.15)。macOSCatalina预装了Ruby(2.6.3)、PHP(7.3.9)、Perl(5.18.4)、Python(2.7.16)等常用的脚本语言,以及Apache(2.4.41)Web服务器。需要注意的是,在新版本中,zsh已取代bash成为新版操作系统中的......
  • redis 基本数据类型
     所有数据都以唯一key字符串作为名称,而value只是数据类型的差异。所以,针对key的命令都是通用的。方便演示,采用docker镜像,可以选择redis:latest镜像,这里我选择了带布隆过虑器的redis镜像。 dockerrun-p6379:6379--nameredis-dredislabs/rebloom:latestd......
  • Python的Lambda函数: 一把极简编程的瑞士军刀
    Python中的lambda函数,或者叫匿名函数,是一个极其强大的工具。它以简洁、优雅的语法提供了创建函数的快速方式。在本篇文章中,我们将全方位地深入研究lambda函数的用法和特点,通过理论和实例相结合的方式,让你的Python编程技巧更上一层楼。Lambda函数基本语法Lambda函数的基本语法形......
  • Android问题解决:android.util.Base64.encode 导致签名不匹配 SignatureDoesNotMatch
    文章目录前文:遇到问题一问:为什么SignatureDoesNotMatch二问:为什么SignatureDoesNotMatch三问:Signature请求参数为什么多了%0A四问:Signature为什么多了换行五问:android.util.Base64.encode的用法前文:遇到问题在折腾《ESP32-C3入门教程——导读》时,需要对接阿里云物联网平台。想要......