正则就是用一些具有特殊含义的符号组合在一起(成为正则表达式)来描述字符或字符串的方法.或者说:正则就是用来描述一类事物的规则.它嵌套在Python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后用C编写的匹配引擎执行.

元字符

\w 匹配字母(包含中文)或数字或下划线

\W 非 \w的

import re
s = re.findall('\w','123euiooj--=,..')
print(s)
运行结果:
['1', '2', '3', 'e', 'u', 'i', 'o', 'o', 'j']
s = re.findall('\W','123euiooj--=,..')
print(s)
运行结果:
['-', '-', '=', ',', '.', '.']

\s匹配任意的空白符

\S 匹配 非\s

s = re.findall('\s','nihao, my world ')
print(s)
运行结果:
[' ', ' ', ' ']
s = re.findall('\S','nihao, my world ')
print(s)
运行结果:
['n', 'i', 'h', 'a', 'o', ',', 'm', 'y', 'w', 'o', 'r', 'l', 'd']

\d匹配数字

\D匹配非\d

s = re.findall('\d','nihao123456')
print(s)
运行结果:
['1', '2', '3', '4', '5', '6']
s = re.findall('\D','nihao123456')
print(s)
运行结果:
['n', 'i', 'h', 'a', 'o']

\A从字符串开头匹配

s = re.findall('\An','nnnihao123456')
print(s)
运行结果:
['n']

\Z匹配字符串的结束,如果是换行,只匹配到换行前的结果

s = re.findall('n\Z','ihao123456n')
print(s)
打印结果:
['n']

\n匹配一个换行符

s = re.findall('\n','ihao123456n\n')
print(s)
打印结果:
['\n']

\t匹配一个制表符

s = re.findall('\n\t','ihao123456n\n\t')
print(s)
打印结果:
['\n\t']

^匹配字符串的开始

s = re.findall('^a','aaaihao123456n')
print(s)--跟\A功能类似
打印结果:['a']

$匹配字符串的结尾

s = re.findall('a$','ihao123456naaaa')
print(s)--跟\Z功能类似
打印结果:
['a']

. 匹配任意字符,除了换行符,当re.dotall标记被指定时,则可以匹配包括换行符的任意字符

s = re.findall('.','ihao123456naa\n')
print(s)
打印结果:
['i', 'h', 'a', 'o', '1', '2', '3', '4', '5', '6', 'n', 'a', 'a']

.可以匹配任意字符,那就说明必须至少有1个字符

print(re.findall('a.b', 'ab aab a*b a2b a牛b a\nb'))
打印结果:
['aab', 'a*b', 'a2b', 'a牛b']

当re.DOTALL被指定时,可以匹配换行符

print(re.findall('a.b','ab aab a*b a2b a牛b a\nb',re.DOTALL))
打印结果:
['aab', 'a*b', 'a2b', 'a牛b', 'a\nb']

[...]匹配字符组中的字符

print(re.findall('a[abc]b', 'aab abb acb adb afb a_b'))
打印结果:
['aab', 'abb', 'acb']

[0-9]代表数字0到9的数字,[a-z]代表小写字母,[A-Z]代表大写字母

print(re.findall('a[0-9]b', 'a1b a3b aeb a*b arb a_b'))
打印结果:
['a1b', 'a3b']

- 在[]中表示范围,如果想要匹配上- 那么这个-符号不能放在中间

print(re.findall('a[-*+]b', 'a-b a*b a+b a/b a6b'))
打印结果:
['a-b', 'a*b', 'a+b']

[^...]匹配除了字符组中的字符的所有字符

print(re.findall('a[^a-z]b', 'acb adb a3b a*b'))
打印结果:
['a3b', 'a*b']

*匹配0个或多个左边的字符

print(re.findall('a*b', 'ab aab aaab abbb'))
打印结果:
['ab', 'aab', 'aaab', 'ab', 'b', 'b']

print(re.findall('ab*', 'ab aab aaab abbbbb'))
打印结果:
['ab', 'a', 'ab', 'a', 'a', 'ab', 'abbbbb']

+匹配一个或多个左边的字符

print(re.findall('a+b', 'ab aab aaab abbb'))
打印结果:
['ab', 'aab', 'aaab', 'ab']

?匹配0个或者1个左边的字符,非贪婪方式

print(re.findall('a?b', 'ab aab abb aaaab a牛b aba**b'))
打印结果:
['ab', 'ab', 'ab', 'b', 'ab', 'b', 'ab', 'b']

{n}精准匹配n个前面的表达式

print(re.findall('a{2}b', 'ab aab aaab aaaaabb'))
打印结果:
['aab', 'aab', 'aab']

{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式

print(re.findall('a{2,4}b', 'ab aab aaab aaaaabb'))
打印结果:
['aab', 'aaab', 'aaaab']

a|b匹配a或者b

print(re.findall('a|b','alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb'))
打印结果:
['a', 'b', 'a', 'b', 'b', 'b', 'a', 'b']

print(re.findall('alex|太白|wusir', 'alex太白wusiraleeeex太太白odlb'))
打印结果:
['alex', '太白', 'wusir', '太白']

()匹配括号内的表达式,也表示一个组,分组

print(re.findall('([a-z]+)_sb','alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb'))
打印结果:
['alex', 'wusir', 'ritian']

()制定一个规则,将满足规则的结果匹配出来,只显示括号里面的

print(re.findall('(.*?)_sb', 'alex_sb wusir_sb 日天_sb'))
打印结果
['alex', ' wusir', ' 日天']

print(re.findall('compan(y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
打印结果:
['ies', 'y']
分组() 中加入?: 表示将整体匹配出来而不只是()里面的内容
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
打印结果:
['companies', 'company']

混合使用

.* 贪婪匹配 从头到尾(.代表任意字符,*匹配0个或多个左边的字符,那就是有0个或多个. 那只要是a开头,b结尾的字符串都符合要求)

print(re.findall('a.*b', 'ab aab a*()b'))
打印结果:
['ab aab a*()b']

.*? 此时的?不是对左边的字符进行0次或者1次的匹配,而只是针对.*这种贪婪匹配的模式进行一种限定:告知他要遵从非贪婪匹配 推荐使用!

print(re.findall('a.*?b', 'ab a1b a*()b, aaaaaab'))
打印结果:
['ab', 'a1b', 'a*()b', 'aaaaaab']

常用方法

re.search 查找

只要找到第一个就返回,返回的是一个包含匹配信息的对象,该对象可以用group()方法显示出来

import re
s = re.search('alex','alex sb sb alex 日天') ##这是个对象
print(s.group())
打印结果:
alex

re.match 查找

查找的内容必须在开头,否则就返回None

s = re.match('alex','alex sb alex sb sb alex 日天')
print(s.group())
打印结果:
alex

re.split 分割

可以按照任意字符分割

print(re.split('[ ::,;;,]','alex wusir,日天,太白;女神;肖锋:吴超'))
打印结果:
['alex', 'wusir', '日天', '太白', '女神', '肖锋', '吴超']

re.sub替换

s = re.sub('小红','小黄','小红和小兰,明天要跟小明一起去郊游,但是小红不想去')
print(s)
打印结果:
小黄和小兰,明天要跟小明一起去郊游,但是小黄不想去

最后如果加上数字,代表替换的次数,如果次数超出字符串出现的次数,则返回所有

s = re.sub('小红','小黄','小红和小兰,明天要跟小明一起去郊游,但是小红不想去',1)
print(s)
打印结果:
小黄和小兰,明天要跟小明一起去郊游,但是小红不想去

obj=re.compile('\d{2}')

obj = re.compile('\d{2}')
print(obj.search('abc123eeee').group()) #12
print(obj.findall('abc123eeee')) #['12'],重用了obj
打印结果:
12
['12']

re.finditer

返回一个存放结果的迭代器

ret = re.finditer('\d','123day788add')
print(ret.__next__().group())
print([i.group() for i in ret])
打印结果:
1
['2', '3', '7', '8', '8']

命名分组
ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")

?P是可以对组进行命名

ret = re.search("<(?P<tag_name1>\w+)>\w+</(?P=tag_name1)>","<h1>hello</h1>")
print(ret.group('tag_name1'))
print(ret.group())
打印结果:
h1
<h1>hello</h1>

转载于:https://www.cnblogs.com/Ailsa-a/p/10397150.html

Python基础-re模块相关推荐

  1. python基础——使用模块

    python基础--使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  2. python基础之模块之os模块

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  3. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  4. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

  5. Python基础之模块和包

    Python基础之模块和包 本节将介绍Python中的模块和包的概念及基本用法. 模块 简单来说模块就是一个python文件,我们可以将一些常量.函数.类等封装到一个模块中,然后在程序中使用该模块.模 ...

  6. 刻意练习:Python基础 -- Task12. 模块

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  7. 带你学python基础:模块和包

    一.什么是模块 在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块 ...

  8. 1.7 Python基础知识 - 模块初识

    在Python中有很多模块,模块对应的就是python源代码文件.模块中有Python程序自己附带的标准模块,还有很多其他人共享的第三方模块.模块中可以定义变量.函数和类.而多个功能类似的模块可以组织 ...

  9. python基础--自定义模块、import、from......import......

    自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...

  10. (更新时间)2021年3月26日 python基础知识(模块的导入)

    模块 <1>Python中的模块 在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用impo ...

最新文章

  1. 5300亿参数,SOTA屠榜!最大NLP预训练模型新王登基,微软英伟达联手称霸
  2. 重复调用的代码块——方法
  3. Java软件研发工程师转行之深度学习(Deep Learning)进阶:手写数字识别+人脸识别+图像中物体分类+视频分类+图像与文字特征+猫狗分类
  4. 基于Spark的Als算法+自迭代+Spark2.0新写法
  5. 如何安装pylab:python如何导入matplotlib模块
  6. Java中的继承性特性
  7. JS 利用数组拼接html字符串
  8. spring-cloud 学习四 服务网关
  9. iCollections for Mac(桌面整理工具)
  10. oracle的解析器,Oracle中sql量化分析工具
  11. UE4--地形篇——风吹草动的草
  12. C++Builder实现鼠标钩子
  13. Flutter面试问题总结
  14. 用神经网络实现机器翻译实战
  15. 目前NAXX所用到的一些BUFF和药水
  16. seo软文标题写作技巧:好的标题是靠这样想出来的
  17. 这些痛,只有程序员懂…
  18. 开通VPN后,网络访问比未开VPN还要慢
  19. 基于Three.js和MindAR实现的网页端人脸识别功能和仿抖音猫脸特效换脸的各种面罩实现(含源码)
  20. [C语言]输出100以内的所有素数(质数)

热门文章

  1. Linux 技术篇-文件大小查看方法实例演示,查看指定文件大小,查看列表下所有文件夹和文件的大小
  2. Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态
  3. Python 语法错误:“SyntaxError: invalid character in identifier“,原因及解决方法
  4. STM32下SD卡驱动详解
  5. [YTU]_2442( C++习题 矩阵求和--重载运算符)
  6. Python数理统计
  7. 0-1背包问题(一维数组解法)
  8. Given an integer, write a function to determine if it is a power of two
  9. go int 转char_Go语言的奇特语法,你怎么看?
  10. 【解决方案】from pip import main