Python的正则表达式使用

Python的正则表达式使用

  • 定义
  • 使用场景
    • 替换
    • 分割
  • 常用的正则表达符号
    • 查原字符
    • 英文状态的句号点 .
    • 反斜杠 \
    • 英文的[]
    • 英文的()
    • 英文的?
    • 加号 +
    • 星号 *
    • 英文状态的大括号 {}
  • 案例

定义

正则表达式是指专门用于描述或刻画字符串内在规律的表达式。

使用场景

无法通过切片,将字符串的子串返回。
借助于replace方法,无法完成非固定值或非固定位置值的替换。
借助于split方法,无法按照多种值实现字符串的分割。

findall(pattern, string, flags=0)

pattern:指定需要匹配的正则表达式。
string:指定待处理的字符串。
flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是让正则表达式对大小写不敏感;re.M的模式是让正则表达式可以多行匹配;re.S的模式指明正则符号,即可以匹配任意字符,包括换行符\n;re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。

替换

sub(pattern, repl, string, count=0, flags=0)

pattern:同findall函数中的pattern。
repl:指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数中的flags。

分割

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

pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。

常用的正则表达符号

使用这些函数,需要导入re功能包

查原字符

指代直接存在于字符串内部的子串。

# 导入第三方包
import re
# 提取出字符串中的Python子串
s1 = '看了博主的Python的文章,感觉Python很简单,学会了!'
out1 = re.findall('Python', s1)
print(out1)

输出:

[‘Python’, ‘Python’]

英文状态的句号点 .

英文的:‘.’ 指代任意字符(如数字、字母、标点符号、汉字等),但除了换行符\n。

# 导入第三方包
import re
# 提取出动力的值
s2 = '此次宝马主要搭载了1.5L和1.5T两种动力的发动机。凯迪拉克则搭载了1.0T和1.8T的动力。'
out2 = re.findall('1...',s2)
out3 = re.findall('1\...',s2) # \. 代表小数点(转义一下)
print(out2)
print(out3)

[‘1.5L’, ‘1.5T’, ‘1.0T’, ‘1.8T’]
[‘1.5L’, ‘1.5T’, ‘1.0T’, ‘1.8T’]

反斜杠 \

反斜杠 \ 表示转义符,用于转换含义的符号。
\n:指代换行;
\t:指代Tab制表符;
\d:指代0~9中的任一数字;
\s:指代任意一种空白(如空格、Tab、换行等);
\w:指代字母、数字和下划线中的任意一种;(52:大小字 + 10:数字0-9 + 1下划线 = 63种)
. :指代句号点本身;
若是想打 \ 则用\\

# 导入第三方包
import re
# 剔除字符串中的所有空白
s3 = ('距离2019北京马拉松开跑只有两周时间了,\n今年的北京马拉松预报名人数超过16万人,\t 媒体公布的中签率只有16%左右,再创历年来的新低。\n')
print(s3)
out4 = re.sub('\s','',s3)
print(out4)

输出:

距离2019北京马拉松开跑只有两周时间了,
今年的北京马拉松预报名人数超过16万人,(这有个tab长度) 媒体公布的中签率只有16%左右,再创历年来的新低。
(这有个空白行)
距离2019北京马拉松开跑只有两周时间了,今年的北京马拉松预报名人数超过16万人,媒体公布的中签率只有16%左右,再创历年来的新低。

英文的[]

指代字符集合,当需要特定字符匹配时,可以选择中括号。

# 导入第三方包
import re
# 取出手机号信息
s4 = '用户联系方式:13612345566,用户编号为11011254321'
out5 = re.findall('1[356789]\d\d\d\d\d\d\d\d\d', s4) # 第二位为356789中的一个
print(out5)
# 提取出动力
s5 = '通过对比新朗逸1.5L和1.5T两种动力在1.5年行驶期后的数据。发现1.5T的口碑相对较好!'
out6 = re.findall('1.5[a-zA-Z]',s5) # 取出a-z或A-Z
print(out6)
# 或
out7 = re.findall('1.5[TL]',s5) # 取出a-z或A-Z
print(out7)

输出:

[‘13612345566’]
[‘1.5L’, ‘1.5T’, ‘1.5T’]
[‘1.5L’, ‘1.5T’, ‘1.5T’]

英文的()

指代特定内容的截取(抠)。

# 导入第三方包
import re
# 提取出用户的年龄
s6 = 'id:1, name:Tom, age:3, gender:1; id:2, name:Lily, age:5, gender:0'
print(re.findall('\d',s6))
print(re.findall('age:\d',s6))
print(re.findall('age:(\d)',s6))

输出:

[‘1’, ‘3’, ‘1’, ‘2’, ‘5’, ‘0’]
[‘age:3’, ‘age:5’]
[‘3’, ‘5’]

英文的?

表示匹配前一个字符匹配,0次或1次。

# 超链接的匹配
URL1 = 'https://www.baidu.com/'
URL2 = 'http://www.gov.cn/'
pattern = 'https?://www\..*?'

这样https和http都能匹配上了。

加号 +

表示匹配前一个字符匹配,1次及以上。

# 邮箱地址的匹配
email1 = 'Lsxxx2011@163.com'
email2 = '654088115@qq.com'
pattern = '[0-9a-zA-Z_\.\-]+@[a-zA-Z0-9_\-]+\.com'

星号 *

表示匹配前一个字符0次及以上。

# 提取出产品名称中含奶粉字样的产品
prod = ['婴儿袜', '亨氏奶粉', '奶粉勺', '多功能奶瓶', '幼儿奶粉量筒', '磨牙棒']
res = []
for i in prod:res.extend(re.findall('.*奶粉.*', i))
print(res)

输出:

[‘亨氏奶粉’, ‘奶粉勺’, ‘幼儿奶粉量筒’]

英文状态的大括号 {}

表示匹配前一个字符特定的次数或范围。
{m}:匹配前一个字符m次;
{m,}:匹配前一个字符至少m次;
{m,n}:匹配前一个字符m~n次;
{,n} :匹配前一个字符之多n次;

# 手机号码的匹配
pattern = '1[356789]\d{9}'
# 至少6个长度的密码
pattern = '\w{6,}'
# 区号信息
pattern = '0\d{2,3}'

案例

# 导入用于正则表达式的re模块
import re
# 取出字符中所有的天气状态
string1 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
print(re.findall("tianqi:'(.*?)'", string1)) # ?为了防止盲目匹配(非贪婪式)

输出:

[‘晴’, ‘阴~小雨’, ‘小雨~中雨’, ‘中雨~小雨’]

# 导入用于正则表达式的re模块
import re
# 取出所有含O字母的单词
string2 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'
print(re.findall('\w*o\w*',string2, flags = re.I)) # re.I大小写不敏感
# 将标点符号、数字和字母删除
string3 = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'
print(re.sub('[,。、a-zA-Z0-9()]','',string3))

输出:

[‘Together’, ‘discovered’, ‘only’, ‘to’, ‘competition’, ‘Our’, ‘celebration’, ‘of’]
据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊耳载荷试验叠装试验等验收试验

# 导入用于正则表达式的re模块
import re
# 将每一部分的内容分割开
string4 = '2室2厅 | 101.62平 | 低区/7层 | 朝南 \n 上海未来 - 浦东 - 金杨 - 2005年建'
split = re.split('[-\|\n]', string4) # \|转义下表示竖杠本身,split函数是用来分割的
print(split)
split_strip = [i.strip() for i in split] # 循环列表去除前后的空格
print(split_strip)

输出:

['2室2厅 ', ’ 101.62平 ', ’ 低区/7层 ', ’ 朝南 ', ’ 上海未来 ', ’ 浦东 ', ’ 金杨 ‘, ’ 2005年建’]
[‘2室2厅’, ‘101.62平’, ‘低区/7层’, ‘朝南’, ‘上海未来’, ‘浦东’, ‘金杨’, ‘2005年建’]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

numpy知识库:深入理解numpy.resize函数和数组的resize方法

前言 numpy中的resize函数顾名思义,可以用于调整数组的大小。但具体如何调整?数组形状变了,意味着数组中的元素个数发生了变化(增加或减少),如何确定resize后的新数组中每个元素的数值呢?本次博文就来探讨并试图回答这…

electron调用dll问题总汇

通过一天的调试安装,electron调用dll成功,先列出当前的环境:node版本: 18.12.0,32位的(因为dll为32位的) VS2019 python node-gyp 1、首先要查看报错原因,通常在某一行会有提示,常…

什么是基线和 x-height

前言 在排版和字体设计领域,了解和掌握基线(baseline)和 x 高度(x-height)的概念是至关重要的。这两个术语描述了字母在视觉上是如何对齐的,以及它们相对于其他字母的大小。通过对这两个概念的深入了解&…

elk+filebeat+kafka集群部署

EFK实验架构图: 实现高并发,无需指定logstash 3台esfile,3台kafka 20.0.0.10 esfile 20.0.0.20 esfile 20.0.0.30 esfile 20.0.0.11 kafka 20.0.0.12 kafka 20.0.0.13 kafka在es1主机上解压filebeat cd filebeat 安装nginx服务 vim /usr/loc…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销高分辨率图像小目标检测系统

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

软件设计师——计算机网络(一)

📑前言 本文主要是【计算机网络】——软件设计师计算机网络的题目,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

su与 su -导致邮箱收件异常

先贴代码 rootlocalhost postfix]# su - mail-user1 Last login: Thu Nov 30 17:07:14 CST 2023 on pts/0 [mail-user1localhost ~]$ mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/mail-user1": 3 messages > 1 root …

Arduino、ESP8266、HTML相关知识点记录

C代码 const char *ssid "********"; // 这里定义将要建立的WiFi名称。 const char *password "********"; // 这里定义将要建立的WiFi密码。 多WiFi连接: wifiMulti.addAP("**…

TypeScript 中声明类型的方法

1、使用:运算符来为变量和函数参数指定类型。例如: let num: number 5; function add(a: number, b: number): number {return a b; }2、使用 type 关键字来声明自定义类型别名。例如: type Point {x: number;y: number; };3、使用 interface 关键字…

element Tree 树形控件 高亮默认

需求&#xff1a; 1. 进入页面&#xff0c;默认选中需要的节点&#xff0c;并展开做出高亮效果&#xff0c;其他时候点击箭头图标才展开。 2. input框搜索树节点 代码&#xff1a; <el-asideclass"aside flex-shrink-0 bg-white"style"width:300px;height…

mockito加junit gd 单元测试 笔记

目录 一、简介1.1 单元测试的特点1.2 mock类框架使用场景1.3 常用mock类框架1.3.1 mockito1.3.2 easymock1.3.3 powermock1.3.4 JMockit 二、mockito的单独使用2.1 mock对象与spy对象2.2 初始化mock/spy对象的方式2.3 参数匹配2.4 方法插桩2.5 InjectMocks注解的使用断言工具 三…

SQL 金额数值转换成中文大写

需求&#xff1a;将金额转换成中文大写格式填入单据合计行&#xff1a; _佰_拾_万_仟_佰_拾_元_角_分 1234567.89 壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分 1.函数转换 drop function n2C;CREATE FUNCTION n2C (num numeric(14,2)) RETURNS VARCHAR(20) AS BEGIN …

Java基础- 自定义类加载器

自定义类加载器 在 Java 中实现自定义类加载器通常涉及继承 ClassLoader 类并重写其 findClass 方法。自定义类加载器允许我们从非标准来源&#xff08;如网络、加密文件或其他媒体&#xff09;加载类。下面是实现自定义类加载器的基本步骤&#xff1a; 1. 继承 ClassLoader …

智跃人力资源管理系统 SQL注入漏洞复现

0x01 产品简介 智跃人力资源管理系统是基于B/S网页端广域网平台&#xff0c;一套考勤系统即可对全国各地多个分公司进行统一管控&#xff0c;成本更低。信息共享更快。跨平台&#xff0c;跨电子设备 0x02 漏洞概述 智跃人力资源管理系统GenerateEntityFromTable.aspx接口处存在…

SQL Sever 基础知识 - 数据查询

SQL Sever 基础知识 - 一、查询数据 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - …

正则表达式及文本三剑客grep sed awk

正则表达式 1.元字符 . //匹配任意单个字符&#xff0c;可以是个汉字 [yang] //匹配范围内的任意单个字符 [^y] //匹配处理指定范围外的任意单个字符 [:alnum:] //字母和数字 [:alpha:] //代表…

Tomcat定时重启脚本

利用Linux系统定时任务重启tomcat&#xff0c;脚本文件参见附件。 系统定时任务设置方式参见《tomcat日志清理篇》。 tomcat定时重启&#xff1a; 1.先写重启脚本&#xff1a;&#xff08;参考附件&#xff09; 2. chmod 777 xxxx.sh 赋予权限 3. crontab -e 修改定时任务&am…

uc_12_进程间通信IPC_有名管道_无名管道

1 内存壁垒 进程间天然存在内存壁垒&#xff0c;无法通过交换虚拟地址直接进行数据交换&#xff1a; 每个进程的用户空间都是0~3G-1&#xff08;32位系统&#xff09;&#xff0c;但它们所对应的物理内存却是各自独立的。系统为每个进程的用户空间维护一张专属于该进程的内存映…

ZPLPrinter Emulator SDK for .NET 6.0.23.1123​ Crack

ZPLPrinter Emulator SDK for .NET 适用于 .NET 的 ZPLPrinter 仿真器 SDK 允许您通过编写 C# 或VB.NET 代码针对任何 .NET Framework、.NET CORE、旧版 ASP.NET MVC 和 CORE、Xamarin、Mono 和通用 Windows 平台 (UWP) 作业。 适用于 .NET 的 ZPLPrinter 仿真器 SDK 允许您将…

第一百八十五回 如何禁止页面跟随手机自动旋转

文章目录 1. 概念介绍2. 使用方法2.1 全面禁止2.2 局部禁止3. 示例代码4. 内容总结我们在上一章回中介绍了"如何自定义Radio组件"相关的内容,本章回中将介绍 如何禁止页面随手机自动旋转.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在手机默认设置下,手机…