正则表达式 re库的使用

news/2024/12/29 22:10:53/

文章目录

  • 常见匹配模式
  • 正则表达式的表示类型
  • re的主要功能函数
    • match对象的属性与方法
      • match对象的属性
      • match对象的方法
    • 1. re.search (正则表达式,字符串 [,匹配模式])
    • 2. re.match (正则表达式,字符串 [,匹配模式])
    • 3. re.findall
    • 4. re.split
    • 5. re.finditer (正则表达式,字符串 [,匹配模式])
    • 6. re.sub (正则表达式, repl, 被替换的字符串 [, count=0, flags=0] )
    • 7. re.compile

常见匹配模式

模式描述
^匹配 字符串的开始
\w匹配 字母数字及下划线
\W匹配 字母数字及下划线
\s匹配 任意空白字符,即空格
\S匹配 任意非空字符
\d匹配 任意数字,等价于[0-9], \d+ 表示匹配多个数字
\D匹配 任意数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z匹配字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
.匹配任意字符,除了换行符
[…]用来表示一组字符,单独列出;例[abc], 匹配字符’a’, ‘b’, ‘c’
[^…]不在[] 中的字符;例[^abc], 匹配除了字符’a’, ‘b’, ‘c’ 外的所有字符
*匹配 0个或多个的表达式
+匹配 1个或多个的表达式
?匹配 0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}精准匹配 n个前面表达式
{n,m}匹配 n到m次由前面的正则表达式定义的片段,贪婪方式
a|b匹配 a或b
()匹配括号内的表达式,也表示一个组
&匹配字符串的末尾

正则表达式的表示类型

re 库采用 raw string 类型表示正则表达式,表示为 r'正则表达式'

raw string 是不含 转义符的字符串

re的主要功能函数

函数说明
re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回 match 对象
re.match()从一个字符串的开始位置起匹配正则表达式,返回 match 对象
re.findall()搜索字符串,以列表类型返回全部能匹配的子串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象
re.sub()在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

函数参数:

  • pattern :正则表达式的字符串
  • string :待匹配字符串
  • flags : 正则表达式使用时的控制标记
    • re.I : 忽略正则表达式的大小写,即对大小写不敏感,[A-Z]能够匹配小写字符
    • re.M : 多行匹配,影响^和$
    • re.S :匹配包括换行符在内的所有字符

match对象的属性与方法

match对象的属性

  • match.string 返回待匹配的文本

  • match.re 返回正则表达式

  • match.pos 正则表达式开始搜索的位置

  • match.endpos 正则表达式搜索结束的位置

match对象的方法

  • match.group() 获得匹配后的字符串

  • match.start() 所匹配的字符串在原字符串的开始位置

  • match.end() 所匹配的字符串在原字符串的结束位置

  • match.span() 返回(match.start(),match.end())的元组

1. re.search (正则表达式,字符串 [,匹配模式])

search() 函数会扫描整个字符串,并且用 group() 函数 返回第一个满足正则表达式的字符串,匹配失败返回 None

re.search() 并不要求必须从字符串的开头进行匹配,也就是说,正则表达式可以是字符串任意位置开始的子串。

import restr1 = '##123Abc!@#你好呀\n\r'
ret = re.search('\w',str1)
print(ret)
print(ret.group())
print(ret.span())--> <re.Match object; span=(2, 3), match='1'>
--> 1
--> (2, 3)

2. re.match (正则表达式,字符串 [,匹配模式])

match() 函数和search() 函数的功能差不多,区别是 match() 函数是必须从字符串的开头匹配,如果开头不满足正则表达式,后面满足正则表达式的字符串也不会被匹配到。

example1:

import restr1 = '##123Abc!@#你好呀\n\r'
ret = re.match('\W\W\w',str1)
print(ret)
print(ret.group())
print(ret.span())--> <re.Match object; span=(0, 3), match='##1'>
--> ##1
--> (0, 3)

example2:

import restr1 = '##123Abc!@#你好呀\n\r'
ret = re.match('\w',str1)
print(ret)--> None

3. re.findall

  • 语法格式 re.findall('正则表达式',文本内容,修饰符)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

import retext = '2023年,6月份, 23日'
pattern = re.compile(r'\d{4}年|\d{1}月|\d{2}日')
res = pattern.findall(text)
print(res)--> ['2023年', '6月', '23日']

4. re.split

  • 语法格式 re.split('正则表达式','文本',[maxsplit=0])

maxsplit是允许被分割成几个子串,默认为 0,不限制次数。

import re
ret = re.split('\W+', 'runoob, runoob, runoob.')
print(ret)ret = re.split('(\W+)', ' runoob, runoob, runoob.') 
print(ret)ret = re.split('\W+', ' runoob, runoob, runoob.', 1) 
print(ret)ret = re.split('aa*', 'hello world')   # 对于一个找不到匹配的字符串而言,split 不会对其作出分割
print(ret)--> ['runoob', 'runoob', 'runoob', '']
--> ['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
--> ['', 'runoob, runoob, runoob.']
--> ['hello world']

5. re.finditer (正则表达式,字符串 [,匹配模式])

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

ret = re.finditer('\w',str1)
for i in ret:print(i.group(),end='')#输出时不换行

6. re.sub (正则表达式, repl, 被替换的字符串 [, count=0, flags=0] )

re 模块提供了re.sub用于替换字符串中的匹配项。

repl 可以是替换的字符串,也可为一个函数。
count 表示模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

example1: repl 为字符串

#!/usr/bin/python
# -*- coding: UTF-8 -*-import rephone = "2004-959-559 # 这是一个国外电话号码"# 删除字符串中的 Python注释 
num = re.sub(r'#.*$', "", phone)
print "电话号码是: ", num# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
print "电话号码是 : ", num--> 电话号码是:  2004-959-559 
--> 电话号码是 :  2004959559

7. re.compile

该函数将创建一个正则表达式的对象,可以实现更有效率的复用。

import re
find_xx = re.compile('正则表达式',修饰符)
ret = find_xx.search(带匹配的字符串)

http://www.ppmy.cn/news/525997.html

相关文章

计算机组成与设计Patterson Hennessy 笔记_1 计算机概要与技术

Patterson & Hennessy 计算机概要与技术 计算机应用包括&#xff1a;个人计算机PC&#xff0c;服务器&#xff0c;嵌入式计算机。后PC时代出现了个人移动设备PMD&#xff08;手机&#xff09;&#xff0c;云计算&#xff08;在网络上提供服务的大服务器集群&#xff0c;供…

Linux Xshell配置public key实现免密登录linux服务器

linux服务器安装成功后&#xff0c;登录linux服务器的工具有很多中&#xff0c;例如&#xff1a;Xshell、SecureCRT等等。而我所服务的用户使用xshell工具来对linux服务器进行运维。 当使用xshell登录linux服务器时&#xff0c;xshell提供了三种身份验证方式&#xff1a; 1.P…

【PCB专题】案例:PCB板厂说焊盘宽度太小容易沉金不良,但加宽又可能导致阻焊桥在阻焊为黑色油墨下无法做出?

此案例是最近在Layout一块PCB板卡,使用了一个以前我没有接触过的器件,此器件的封装是QFN128。 总的问题是:PCB板厂说如果按原稿制作的话,焊盘宽度太小沉金容易不良,但电话里和我说如果加宽又可能导致阻焊桥在黑色油墨情况下无法做出? 板厂给的EQ如下所示,表示TOP面设计…

Win7蓝屏代码0x000000001e怎么解决

蓝屏问题&#xff0c;是所有系统都会遇到的最普遍的电脑故障问题&#xff0c;电脑蓝屏是因为系统与硬件或软件不兼容冲突引起的&#xff0c;不同的提示代码表示了不同的蓝屏原因&#xff0c;那么Win7蓝屏代码0x000000001e怎么解决?为此问题困扰的用户&#xff0c;请来看看Win7…

电脑蓝屏错误代码0x0000007e的解决方法

电脑蓝屏的情况不少人都遇到过&#xff0c;每当电脑蓝屏错误代码出现&#xff0c;小伙伴们总是一脸蒙逼&#xff0c;其实导致蓝屏的因素很多&#xff0c;不幸遇到这种情况&#xff0c;我们首先要通过错误代码找出问题的所在。下面快启动小编就跟大家分享一下电脑蓝屏错误代码0x…

电脑0x0000008e蓝屏代码是什么意思

使用电脑的过程中&#xff0c;难免会遇到一些故障现象&#xff0c;其中电脑蓝屏是常见的问题之一。那么当出现电脑蓝屏提示0x0000008e蓝屏代码是什么意思呢&#xff1f;电脑蓝屏怎么办呢&#xff1f;下面小编就给大家分享下电脑出现0x0000008e蓝屏代码的原因和解决方法。 具体…

oracle蓝屏解决方法,win10系统蓝屏怎么办 蓝屏代码0x000007e的3种解决方法

不断有win10系统用户在使用电脑的时候&#xff0c;发现出现了蓝屏死机的情况&#xff0c;并提示0x000007e错误代码&#xff0c;那win10出现蓝屏代码0x000007e怎么办呢&#xff0c;本文就给大家讲解一下win10出现蓝屏代码0x000007e解决方法。跟着小编一起来看看吧。 蓝屏代码0x0…

计算机蓝屏 代码0000a,计算机出现蓝屏代码0x0000000a原因及解决方案

本篇文章给大家提供的是计算机出现蓝屏代码0x0000000a原因及解决方案&#xff0c;通过这篇文章您可以更好的了解出现蓝屏代码0x0000000a原因和蓝屏代码0x0000000a解决方案&#xff0c;希望能对您有所帮助。 Windows 2000 蓝屏故障的线索&#xff1a;故障码 0x0000000a 线索来源…