Python中的正则表达式(一)

在Python中,正则表达式是一种用于匹配和操作字符串的强大工具。正则表达式由一系列字符和特殊字符组成,用于定义搜索模式。

在Python中,我们使用内置的 re 模块来操作正则表达式。要使用正则表达式,我们首先需要导入 re 模块。

下面是一些常用的正则表达式的定义:

  • .:匹配任意字符(除了换行符)。

  • \d:匹配任意一个数字字符。

  • \D:匹配任意一个非数字字符。

  • \w:匹配任意一个字母数字字符(包括下划线)。

  • \W:匹配任意一个非字母数字字符。

  • \s:匹配任意一个空白字符(包括空格、制表符、换行符等)。

  • \S:匹配任意一个非空白字符。

  • []:定义字符集,可以匹配其中的任意一个字符。例如,[abc] 匹配字符 abc

  • [^]:在字符集中的开头使用 ^,表示取反。例如,[^abc] 匹配除了字符 abc 之外的任意一个字符。

  • *:匹配前一个字符的零个或多个出现。例如,a* 匹配零个或多个字符 a

  • +:匹配前一个字符的一个或多个出现。例如,a+ 匹配一个或多个字符 a

  • ?:匹配前一个字符的零个或一个出现。例如,a? 匹配零个或一个字符 a

  • {n}:匹配前一个字符的 n 个出现。例如,a{3} 匹配连续出现三个字符 a

  • {m,n}:匹配前一个字符的 m 到 n 个出现。例如,a{2,4} 匹配连续出现两个到四个字符 a

  • ():定义分组,用于对匹配的字符进行分组或提取。

案例分析

一个文本文件里面存储了 一些市场职位信息,格式如下所示

Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python) 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python) 赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
Python高级开发工程师 上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师 上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员

现在,我们需要写一个程序,从这些文本里面抓取所有职位的薪资。

要获取这样的结果

b49bd4d3e703bb19ce30c7208f5a1b78.png

怎么做?大家先自己思考一下。

这是典型的字符串处理。分析这里面的规律,可以发现,薪资的数字后面都有关键字 万/月 或者 万/每月,根据我们学过的知识,我们不难写出下面的代码

content = '''
Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python) 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python) 赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
Python高级开发工程师 上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师 上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员
'''# 将文本内容按行放入列表
lines = content.splitlines()
for line in lines:# 查找'万/月' 在 字符串中什么地方pos2 = line.find('万/月')if pos2 < 0:# 查找'万/每月' 在 字符串中什么地方pos2 = line.find('万/每月')# 都找不到if pos2 < 0: continue# 执行到这里,说明可以找到薪资关键字# 接下来分析 薪资 数字的起始位置# 方法是 找到 pos2 前面薪资数字开始的位置idx = pos2-1# 只要是数字或者小数点,就继续往前面找while line[idx].isdigit() or line[idx]=='.':idx -= 1# 现在 idx 指向 薪资数字前面的那个字,# 所以薪资开始的 索引 就是 idx+1pos1 = idx + 1print(line[pos1:pos2])

运行一下,发现完全可以。在你高兴完之后,我们再看看写的代码。怎么样?

太麻烦了,是不是。为了从每行获取薪资对应的数字,我们可是写了不少行代码。这种从字符串中搜索出某种特征的子串有没有更简单的方法呢?

解决方案就是我们今天要介绍的 正则表达式 。

如果我们使用正则表达式,代码可以这样
content = '''
Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python) 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python) 赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
Python高级开发工程师 上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师 上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员
'''import re
for one in  re.findall(r'([\d.]+)万/每{0,1}月', content):print(one)

运行一下看看,结果是一样的。但是代码却简单多了。

正则表达式,是一种语法,用来描述你想搜索的字符串的特征。

这里指定了一个正则表达式

re.findall(r'([\d.]+)万/每{0,1}月', content)([\d.]+)万/每{0,1}月,就是正则表达式字符串,指定了搜索子串的特征。

为什么这么写?我们后面再介绍。

findall函数返回所有匹配的子串,放在一个列表中。

从上面的例子可以看出,用正则表达式关键的地方在于,如何写出正确的表达式语法。

正则表达式非常强大,语法非常复杂,如果你英文阅读能力还可以,那太好了,点击这里:https://docs.python.org/3/howto/regex.html,参考Python官方文档里面的描述。具体的使用细节包括语法都在里面。

本教程会继续给大家介绍一些常见的正则表达式语法。

想在线Python编程的,快从小蜜蜂网站:http://zglg.work 注册登录体验。

f310a07d9c0dea69801d849b1a655385.png

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android SystemConfig相关

SystemConfig在哪里初始化 它声明在PackageManagerService类的静态方法main()中。在该方法中间定义Injector类对象时&#xff0c;作为它的构造参数。它是调用的SystemConfig.getInstance()实现初始化&#xff0c;之后能通过Injector类对象的getSystemConfig()得到SystemConfig类…

每日五道java面试题之java基础篇(三)

第一题. switch 是否能作⽤在 byte/long/String 上&#xff1f; Java5 以前 switch(expr)中&#xff0c;expr 只能是 byte、short、char、int。从 Java 5 开始&#xff0c;Java 中引⼊了枚举类型&#xff0c; expr 也可以是 enum 类型。从 Java 7 开始&#xff0c;expr 还可以…

自己DIY制作耳机壳一般用哪种材料比较好,性价比比较高

在选择耳机壳的材料时&#xff0c;除了考虑材料本身的性能外&#xff0c;还需要考虑成本、加工难度、耐用性、环保性等方面的因素。 从性能方面来看&#xff1a; 制作耳机壳的UV树脂和塑料材质各有其优缺点。UV树脂具有高硬度、耐磨、耐高温、环保等优点&#xff0c;能够提供更…

Java写标准输出进度条

学Java这么久了&#xff0c;突发奇想写一个 进度条 玩玩&#xff0c;下面展示一下成功吧&#xff01; Java代码实现如下 public class ProcessBar {public static void main(String[] args) {//进度条StringBuilder processBarnew StringBuilder();//进度条长度int total100;/…

C++——二叉树

引入 map和set特性需要先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构 二叉搜索树的特性了解&#xff0c;有助于更好的理解map和set的特性 1.二叉搜索树的概念及优缺点 1.1二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或…

windows安装sqlite

windows安装sqlite比linux麻烦很多 1.下载 下载链接&#xff1a;链接 下载dll的zip文件 2.解压并放到文件夹 将压缩包内的文件解压&#xff0c;放到C://sqlite下 3.编辑环境变量 添加到系统变量的path中 4.验证 打开命令提示符&#xff0c;输入 sqlite3有结果就行

DNS 域名系统——应用层

目录 1 域名系统 DNS 1.1 域名系统 1.2 互联网的域名结构 1.2.1 顶级域名 TLD(Top Level Domain) (1) 国家顶级域名 nTLD (2) 通用顶级域名 gTLD (3) 基础结构域名 (infrastructure domain) 1.3 域名服务器 1.3.1 域名服务器的四种类型 &#xff08;1…

深入理解java之多线程(一)

前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff0c;他在我们实际开发中应用广泛并且基础&#xff0c;可以说掌握多线程编写程序是每一个程序员都应当必备的技能&#xff0c;很多小伙伴也会吐槽多线程比较难&#xff0c;但因为其实…

【linux系统体验】-archlinux折腾日记

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化 三、问题总结3.1 终端中文乱码 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…

面向数据报编程-UDP协议

目录 前言&#xff1a; 1.UDP协议API 1.1UDP编程原理 1.2DatagramSocket类 &#xff08;1&#xff09;DatagramSocket构造方法 &#xff08;2&#xff09;DatagramSocket普通方法 1.3DatagramPacket类 &#xff08;1&#xff09;DatagramPacket构造方法 &#xff08;2…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月10日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月10日 星期六 农历正月初一 春节 1、 国务院&#xff1a;到2025年&#xff0c;初步建成覆盖各领域、各环节的废弃物循环利用体系。 2、 国家移民管理局&#xff1a;部分国家人员可以用更多事由免签入境海南。 3、 市场…

OpenAI给DALL-E 3来了个新动作,加入了全新水印技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

政安晨:政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}

这一篇中&#xff0c;咱们使用Pandas与Scikit-liarn工具进行一下模型验证&#xff0c;之后再顺势了解一些过拟合与欠拟合&#xff0c;这是您逐渐深入机器学习的开始&#xff01; 模型验证 评估您的模型性能&#xff0c;以便测试和比较其他选择。 在上一篇中&#xff0c;您已经…

51单片机 跑马灯

#include <reg52.h>//毫秒级延时函数 void delay(int z) {int x,y;for(x z; x > 0; x--)for(y 114; y > 0 ; y--); }sbit LED1 P1^0x0; sbit LED2 P1^0x1; sbit LED3 P1^0x2; sbit LED4 P1^0x3; sbit LED5 P1^0x4; sbit LED6 P1^0x5; sbit LED7 P1^0x6; s…

详解格式化输入函数scanf

大家好&#xff0c;今天给大家介绍详解格式化输入函数scanf&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 C语言中常用的输入可以有多种方式&#xff0c;如scanf(),getchar(),g…

猫头虎分享:2024龙年IT行业热门技术大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【06】C++ 模板初阶

文章目录 &#x1f308; Ⅰ 泛型编程&#x1f308; Ⅱ 函数模板1. 函数模板概念2. 函数模板格式 &#x1f308; Ⅰ 泛型编程 1. 泛型编程引入 假设当前要实现交换两个变量的功能&#xff0c;那么就得根据实参的数据类型来对该函数进行重载。重载的函数只是数据类型不同而已&a…

Select 选择器 el-option 回显错误 value

离谱 回显的内容不是 label 而是 value 的值 返回官方看说明&#xff1a; v-model的值为当前被选中的el-option的 value 属性值 value / v-model 绑定值有3种类型 boolean / string / number 根据自身代码猜测是&#xff1a;tableData.bookId 与 item.id 类型不一致导致 &…

火车可视化调车系统

列车在调车作业时&#xff0c;当机车头在尾部推动车厢时&#xff0c;司机室一人操控机车&#xff0c;车厢前端配备两名挂梯随车运行调车员&#xff0c;调车员人为分析行车方向是否有障碍、轨道行人等紧急情况&#xff0c;通过对讲机通知司机控制停车。由于司机无法直观观察列车…

ICCV 2023 | 8篇论文看扩散模型diffusion用于图像检测任务:动作检测、目标检测、异常检测、deepfake检测...

1、动作检测 DiffTAD: Temporal Action Detection with Proposal Denoising Diffusion 基于扩散方法提出一种新的时序动作检测&#xff08;TAD&#xff09;算法&#xff0c;简称DiffTAD。以随机时序proposals作为输入&#xff0c;可以在未修剪的长视频中准确生成动作proposals。…