一篇文章带你入门Python正则表达式

目录
  • Python3 正则表达式
    • 1.match函数
    • 2.search函数
    • search和match的区别
    • 3. sub函数
    • 4.compile函数
  • 5.findall
    • 6.finditer
    • 7.split
  • 总结

Python3 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。本文主要阐述re包中的主要函数。

在阐述re包中的函数之前,我们首先看议案正则表达式的模式,即使用特殊的语法来表示一个正则表达式。

1.match函数

  • re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
  • 函数用法:re.match(pattern, string, flags=0)
  • pattern: 所要匹配的正则表达式string: 要匹配的字符串flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    • re.I 忽略大小写
    • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    • re.M 多行模式re.S 即为' . ‘并且包括换行符在内的任意字符(' . '不包括换行符)
    • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    • re.X 为了增加可读性,忽略空格和' # '后面的注释

匹配对象方法:

  • group(num=0): 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
  • groups(): 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
import re
print(re.match("xixi", "xixi_haha_heihei").group())
xixi
line = 'Cats are smarter than dogs'
b = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)

print(b.group()) # 返回所有
print(b.group(1)) # 返回第一组,即(.*)对应的
print(b.group(2)) # 返回第二组,即(.*?)对应的
Cats are smarter than dogs
Cats
smarter

2.search函数

re.search 扫描整个字符串并返回第一个成功的匹配。

函数用法:re.search(pattern, string, flags=0)

print(re.match('heihei', 'xixi_haha_heihei'))
print(re.search('heihei', 'xixi_haha_heihei').group())
None
heihei
line = 'Cats are smarter than dogs'
b = re.search(r'(.*) are (.*?) .*', line, re.M|re.I)

print(b.group()) # 返回所有
print(b.group(1)) # 返回第一组,即(.*)对应的
print(b.group(2)) # 返回第二组,即(.*?)对应的
Cats are smarter than dogs
Cats
smarter

search和match的区别

match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而search匹配整个字符串,直到找到一个匹配。

3. sub函数

re提供了re.sub来替换字符串中的匹配项。
函数用法:re.sub(pattern, repl, string, count=0, flags=0)

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。
phone = '133-3333-3333  # this is a phone number'

num = re.sub(r'#.*$', '', phone)
print('phone num', num)
# 移除注释,找到以#开头的。

num = re.sub(r'\D', '', phone)
print('phone num', num)
# 移除非数字内容
phone num 133-3333-3333
phone num 13333333333

repl是函数的情况

def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)

s = 'A233Sfd34'
print(re.sub('(?P<value>\d+)', double, s))
A466Sfd68

4.compile函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
函数使用:re.compile(pattern, flags)

pattern = re.compile(r'/d+')
m = pattern.match('ones123412')
print(m)
None

5.findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意:match和search是匹配一次,但是findall是匹配所有。

函数使用:findall(string, pos, endpos)

  • string 待匹配的字符串。
  • pos 可选参数,指定字符串的起始位置,默认为 0。
  • endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
pattern = re.compile(r'\d+')
result1 = pattern.findall('xixixix 123 heihiehei 456')
result2 = pattern.findall('xixixix 123 heihiehei 456', 0, 15)

print(result1)
print(result2)
['123', '456']
['123']

6.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

ittt = re.finditer(r'\d+', '12dsfasdf123asdf534')
for ttt in ittt:
    print(ttt.group())
12
123
534

7.split

split 方法按照能够匹配的子串将字符串分割后返回列表。

函数使用:

re.split(pattern, string, maxsplit=0, flags=0)

  • pattern: 匹配的正则表达式
  • string: 要匹配的字符串。
  • maxsplit: 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
  • flags: 标志位,用于控制正则表达式的匹配方式,
print(re.split('\W+', 'xxixix, xixixi, hehiehei'))
print(re.split('(\W+)', ' xxixix, xixixi, hehiehei'))
['xxixix', 'xixixi', 'hehiehei']
['', ' ', 'xxixix', ', ', 'xixixi', ', ', 'hehiehei']

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 一篇文章带你了解Python和Java的正则表达式对比

    目录 简单批量替换 复杂模板替换 总结 参考资料: 正则表达式语法–菜鸟教程 Java正则表达式实现 简单批量替换 举例:将and 批量替换为&& Python实现 import re def transformSimple(fromRegex, toText, inText): return re.sub(fromRegex, toText,inText, flags =re.I) if __name__ == "__main__": inText = "x

  • Python3正则表达式之:(?(id/name)yes-pattern|no-pattern)条件性匹配

    目录 1. 用途 2. 参数含义 3. 语法 4. 用法详解 4.1 把(\d+)后面的问号去掉, 也就是说必须存在group 1,不是可有可无  4.2 改一下匹配字符串  4.3 group可有可无的情况(group后增加问号)  4.4 只匹配group 1 部分, yes部分没有匹配 5.结论 1. 通过4.1 4.2  4.3 对比可以发现: 2. 通过4.4可知:可以仅匹配group部分, 如果yes-pattern和no-pattern没有匹配到, 则会仅输出group匹配的内容

  • python正则表达式查找和替换内容的实例详解

    1.编写Python正则表达式字符串s. 2.使用re.compile将正则表达式编译成正则对象Patternp. 3.正则对象p调用p.search或p.findall或p.finditer查找内容. 4.正则对象p调用p.sub或p.subn替换内容. 实例 import re s = "正则表达式" p = re.compile(s) # 查找 mf1 = p.search("检测内容") mf2 = p.findall("检测内容") m

  • python网络爬虫精解之正则表达式的使用说明

    目录 一.常见的匹配规则 二.常见的匹配方法 1.match() 2.search() 3.findall() 4.sub() 5.compile() 一.常见的匹配规则 二.常见的匹配方法 1.match() match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第二个是需要匹配的字符串: re.match(正则表达式,字符串) 如果该方法匹配成功,返回的是SRE_Match对象,如果未匹配到,则返回None. 返回成功后有两个方法,group()方法用来查看匹配

  • 一篇文章彻底搞懂python正则表达式

    目录 前言 1. 正则表达式的基本概念 2. python的正则表达式re模块 3. 正则表达式语法 (1)匹配单个字符 (2)匹配多个字符 (3)边界匹配 (4)分组匹配 4. re模块相关方法使用 总结 前言 有时候字符串匹配解决不了问题,这个时候就需要正则表达式来处理.因为每一次匹配(比如找以什么开头的,以什么结尾的字符串要写好多个函数)都要单独完成,我们可以给它制定一个规则. 主要应用:爬虫的时候需要爬取各种信息,使用正则表达式可以很方便的处理需要的数据. 1. 正则表达式的基本概念 使

  • 一篇文章带你入门Python正则表达式

    目录 Python3 正则表达式 1.match函数 2.search函数 search和match的区别 3. sub函数 4.compile函数 5.findall 6.finditer 7.split 总结 Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.本文主要阐述re包中的主要函数. 在阐述re包中的函数之前,我们首先看议案正则表达式的模式,即使用特殊的语法来表示一个正则表达式. 1.match函数 re.match 尝试从

  • 一篇文章带你了解python正则表达式的正确用法

    目录 正则表达式的介绍 re模块 匹配单个字符 1.匹配任意一个字符 2.匹配[ ]中列举的字符 3.\d匹配数字,即0-9 4.\D匹配非数字,即不是数字 5.\s匹配空白,即 空格,tab键 6.\S匹配非空白 7.\w匹配非特殊字符,即a-z.A-Z.0-9._.汉字 8.\W匹配特殊字符,即非字母.非数字.非汉字 总结 正则表达式的介绍 1)在实际开发过程中经常会有查找符合某些复杂规则的字符串的需要,比如:邮箱.手机号码等,这时候想匹配或者查找符合某些规则的字符串就可以使用正则表达式了.

  • 一篇文章带你入门python之推导式

    目录 一.dict推导式 二.list推导式 三.set推导式 四.含if推导式 五.含for推导式 总结 一.dict推导式 list1 = ['name', 'age', 'gender'] list2 = ['zmz', '20', 'boy'] # 字典推导式 -- 快速合并列表为字典,或提取字典中的目标数据 # 例 1 -- key是数字,value是这个数字的平方 dict1 = {i: i ** 2 for i in range(1, 5)} print(dict1) # 例 2

  • 一篇文章带你入门Springboot沙箱环境支付宝支付(附源码)

    目录 0.前言 1.效果展示 2.技术栈介绍 3.前期准备 第一步:申请一个沙箱测试账号 第二步:电脑下载一个支付宝提供的客户端用于生成RSA2 第三步:手机下载 [沙箱版支付宝] 4.后端搭建 项目目录结构 pom.xml application.yml application-alipay.proerties Order订单实体类 Service层 Controller层 配置类 跨域拦截器配置以及注册 启动spirngboot项目 支付操作的页面: 支付完成后支付宝回调的页面: 启动前端项

  • 一篇文章带你了解python异常基础

    目录 1. 程序中的问题 1.1 低级语法错误 1.2 中介错误:代码存在隐性错误 1.3 高级错误:软件面对不确定性的异常错误 2. 捕捉异常 2.1 基本异常捕捉语句 2.2 带finally子句的异常处理 2.3 try-except-else 结构 2.4 try-except-else-finally 结构 2.5 捕捉特定异常信息 3. 抛出异常 总结 1. 程序中的问题 1.1 低级语法错误 低级错误纯属语法错误,代码主要在编写.调试阶段就报错. >>> if True S

  • 一篇文章带你了解python标准库--time模块

    目录 1. 调用语法: 2. time概述 3. 时间获取 4. 时间格式化(将时间以合理的方式展示出来) 5. 程序计时应用 6. 示例 总结 Time库是python中处理时间的标准库 1. 调用语法: import time time.<b>() 计算机时间的表达,提供获取系统时间并格式化输出功能 提供提供系统精确即使功能,用于程序性能分析 2. time概述 time库包括三类函数 时间获取: time() ctime() gmtime() 时间格式化: strftime() strp

  • 一篇文章带你自学python Django

    目录 1. Django简介 Django是什么? Django前景 Django框架核心 2. 设计模式 MVT模式 3. 开发环境简介 4.创建虚拟环境 4.1.首先安装管理环境的包以及虚拟环境包 4.1.1 安装环境管理包virtualenvwrapper 4.1.2 安装虚拟环境包virtualenv 4.1.3 查看pip list,检查是否安装成功 4.2 对虚拟环境的操作 4.2.1 创建虚拟环境 4.2.2 查看虚拟环境中的包,并安装Django包 4.2.3 退出虚拟环境 4.

  • 一篇文章带你了解python字典基础

    目录 1. 字典基础知识 字典的基本格式表示 字典的键.值设置要求 1)键的设置要求 2)值的设置要求 2. 字典元素增加 1.利用赋值给字典增加元素 2.利用setdefault()方法给字典增加元素 3. 字典值查找 1.字典名+[key]查找 2.利用get()方法查找 4. 字典值修改 1.利用赋值修改键对应的值 2.利用update()方法修改键对应的值 5. 字典元素删除 1.利用del函数删除 2.利用pop()方法删除 3.利用popitem()方法删除 6. 字典遍历操作 1.

随机推荐