Python中的正则表达式(一)

news2024/11/24 5:30:58

在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+1
    pos1 = idx + 1

    print(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://www.coloradmin.cn/o/1445673.html

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

相关文章

没更新的日子也在努力呀,布局2024!

文章目录 ⭐ 没更新的日子也在努力呀⭐ 近期的一个状态 - 已圆满⭐ 又到了2024的许愿时间了⭐ 开发者要如何去 "创富" ⭐ 没更新的日子也在努力呀 感觉很久没有更新视频了&#xff0c;好吧&#xff0c;其实真的很久没有更新短视频了。最近的一两个月真的太忙了&#…

mysql经典4张表问题

1.数据库表结构关联图 2.问题&#xff1a; 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数3.查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、查询名字中含有"风"字的学生信息5、查询课程名称为"数学"&…

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …

【网站项目】027学校运动会信息管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C#,普洛尼克数(Pronic Number)的算法与源代码

1 普洛尼克数(pronic number) 普洛尼克数(pronic number)&#xff0c;也叫矩形数、欧波朗数(oblong number)&#xff0c;是两个连续非负整数的积&#xff0c;即mn*(n1)。第n个普洛尼克数侪是n个三角形数个两倍。 2 计算结果 3 源程序 using System; namespace Legalsoft.Tru…

VSCode python插件:找不到自定义包导致语法解析失败

众所周知&#xff0c;在python源码中&#xff0c;我们可以通过 sys.path.append("path-to-lib") 来为python解释器添加自定义包的寻找路径。 但是vscode的默认python插件可没法聪明到根据这句话去找这个包&#xff0c;这就会导致后续代码中使用了这个库的部分无法享…

人力资源智能化管理项目(day05:角色管理)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 搭建页面结构 分页组件&#xff1a;设置layout&#xff0c;表示需要显示的内容&#xff0c;用逗号分隔&#xff0c;布局元素会依次显示。prev表示上一页&#xff0c;next为…

AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?

OpenAI 发布 ChatGPT 已经1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已经广为人知&#xff0c;我们常常津津乐道于 ChatGPT 和 Claude 这样的人工智能系统能够神奇地生成文本与我们对话&#xff0c;并且能够记忆上下文情境。 Midjunery和DALLE 这样的AI…

Qt【一】:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow&#xff1a;包含菜单栏、工具栏、状态栏 QWidget&#xff1a;普通的一个窗口&#xff0c;什么也不包括 QDialog&#xff1a;对话框&#xff0c;常用来做登录窗口、弹出窗口&#xff08;例如设置页面&#xff09; QDialog实现简易登录界面…

AI - 碰撞避免算法分析(VO/RVO)

VO/RVO VO和RVO的原理本身理解起来比较简单的&#xff0c;就是根据两个圆形的相对半径&#xff0c;相对速度&#xff0c;相对位置&#xff0c;求出碰撞区域&#xff0c;然后将速度移出碰撞区域。VO是双方都是当作对方速度不变的情况下&#xff0c;各自都将速度完整的移出了会碰…

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

Centos7安装nginx yum报错

Centos7安装nginx yum报错&#xff0c;yum源报错解决办法&#xff1a; 1、更新epel源后&#xff0c;出现yum报错 [roothacker117 ~]# yum install epel-release&#xff08;安装成功&#xff09; [roothacker117 ~]# yum install nginx&#xff08;安装失败&#xff0c;提示如…

极市平台 | 卡车货车、野外火灾、抽烟识别等开源数据集资源汇总

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;卡车货车、野外火灾、抽烟识别等开源数据集资源汇总 最近正好在做这方面的项目。本文收集了一些卡车货车、抽烟和野外火灾等开源数据集资源&#xff0c;…

springboot182基于springboot的网上服装商城

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Stable Diffusion 模型下载:majicMIX sombre 麦橘唯美

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

C++进阶(十五)C++的类型转换

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换1、static_cast2、reint…

Python 中的互斥锁:保护共享资源的利器

Python 作为一门流行的编程语言&#xff0c;广泛应用于各种领域&#xff0c;特别是在多线程编程中。多线程编程可以让程序同时执行多个任务&#xff0c;但也会引发一些问题&#xff0c;比如多个线程同时访问共享资源可能导致数据错误或不一致。为了解决这个问题&#xff0c;Pyt…

《CSS 简易速速上手小册》第10章:未来的 CSS(2024 最新版)

文章目录 10.1 CSS 的新特性和趋势10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 CSS Grid 创建响应式图库10.1.3 拓展案例 1&#xff1a;利用 CSS 变量实现主题切换10.1.4 拓展案例 2&#xff1a;使用 lab() 颜色和 layer 规则优化样式 10.2 CSS Houdini&#xff1a;魔法般…

OpenMVG(EXIF、畸变、仿射特征、特征匹配)

本人之前也研究过OpenMVS但是对于OpenMVG只是原理层次的了解&#xff0c;因此乘着过年期间对这个库进行详细的学习。 目录 1 OpenMVG编译与简单测试 1.1 sfm_data.json获取 1.2 计算特征 2 OpenMVG整个流程的运行测试 3 OpenMVG实战 3.1 SVG绘制 3.2 解析图片的EXIF信息…

Linux:信号的保存

文章目录 信号相关概念信号递达信号未决信号阻塞内核中的示意图 信号集的操作函数 前面对于信号的产生中对操作系统有了一个基础的认知&#xff0c;对于一个真正的操作系统来说&#xff0c;进程是由操作系统进行调度的&#xff0c;那操作系统本身也是代码&#xff0c;是由谁进行…