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+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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot187社区养老服务平台的设计与实现

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

【C++函数探幽】内联函数inline

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 前言2.概念3.特性…

【C++】类和对象(四)

前言&#xff1a;在类和对象中&#xff0c;我们走过了十分漫长的道路&#xff0c;今天我们将进一步学习类和对象&#xff0c;类和对象这块荆棘地很长&#xff0c;各位一起加油呀。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&a…

DS:二叉树的链式结构及实现

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、前言 前期我们解释过二叉树的顺序结构&#xff08;堆&#xff09;为什么比较适用于完全二叉树&#xff0c;因为如果用数组来实现非完全二叉树&#xff0c;那么数组的中间部分就可能会存在大量的空间浪费。 …

二叉树习题

路径和&#xff1a;不能将叶节点向下扩展一层nullptr来标记这个节点是叶节点 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, T…

【计算机网络】电子邮件

用户代理 user agent邮件服务器 mail server简单邮件传输协议 SMTP 使用TCP与HTTP对比 HTTP&#xff1a;web服务器向web客户传输文件 SMTP&#xff1a;邮件服务器向另一个邮件服务器传输文件 持续链接 持续链接 拉协议&#xff08;pull protocol&#xff09;由想接收发起 …

顺序表(上)

1.顺序表的概念 顺序表&#xff08;Sequential List&#xff09;是一种基本的数据结构&#xff0c;它是一种线性表的存储结构。线性表是一种数据元素的有限序列&#xff0c;元素之间存在顺序关系。 线性表&#xff1a;线性表&#xff08; linearlist &#xff09;是n个具有相…

StringBuilder

StringBuilder代表可变字符串&#xff0c;相当于一个容器&#xff0c;里面的字符串可以改变&#xff0c;用来操作字符串。此类设计用作StringBuffer替代品。 构造方法&#xff1a; StringBuilder() StringBuilder(String str) 操作方法&#xff1a; 1. append()&#xff1…

爬爬爬——qq模拟登录,古诗文网模拟登录并爬取内容(cookie)

cookie——可以理解为&#xff0c;记录为登录状态。如果在登录一个网站之后&#xff0c;想拿到信息发现404了&#xff0c;就是没有加cookie在这个header里。 下图加了cookie和没有加的对比&#xff08;我是用了selenuim自动化登录的&#xff09;&#xff1a; 下面是加了的 这个…

【C语言】指针的入门篇2,深入理解指针和数组的关系

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】指针的入门篇2&#xff0c;深入理解指针和数组的关系&#xff0c;图文讲解指针和数组关系的知识&#xff0c;带大家理解指针和数组的关系&#xff0c;以及指针数组的用法&#xff0c;感谢观看&#xff0c;支持的可以给个赞…

书生浦语大模型实战营-课程笔记(2)

介绍了一下InternLm的总体情况。 InternLm是训练框架&#xff0c;Lagent是智能体框架。 这个预训练需要这么多算力&#xff0c;大模型确实花钱。 Lagent是智能体框架&#xff0c;相当于LLM的应用。 pip设置 开发机的配置 pip install transformers4.33.1 timm0.4.12 sente…

数据结构——5.5 树与二叉树的应用

5.5 树与二叉树的应用 概念 结点的权&#xff1a;大小可以表示结点的重要性 结点的带权路径长度&#xff1a;从树的根到该结&#xff0c;的路径长度&#xff08;经过的边数&#xff09;与该结点权的乘积 树的带权路径长度&#xff1a;树中所有叶结点的带权路径长度之和(WPL) …

C语言函数(四):递归

目录 1.什么是递归2.递归的限制条件3.递归举例3.1 举例一&#xff1a;求n的阶乘 4.递归与迭代4.1 求第n个斐波那契数 5.递归与循环的选择 1.什么是递归 在学习函数这一章节&#xff0c;递归是每个计算机语言绕不开的知识点&#xff0c;那什么是递归呢&#xff1f; 递归就是一种…

Java入门高频考查基础知识9(银盛15问万字参考答案)

JAVA刷题专栏&#xff1a;http://t.csdnimg.cn/9qscL 目录 一、Springcloud的工作原理 三、注册中心心跳是几秒 四、消费者是如何发现服务提供者的 五、多个消费者调⽤用同⼀接口&#xff0c;eruka默认的分配⽅式是什么 六、springboot常用注解&#xff0c;及其实现 七、…

【C语言】指针的入门篇,深入理解指针和指针变量

欢迎来sobercq的博客喔&#xff0c;本期系列为【C语言】指针的入门篇&#xff0c;深入理解指针和指针变量 图文讲解指针的知识&#xff0c;带大家理解指针和内存的关系&#xff0c;以及指针的用法&#xff0c;感谢观看&#xff0c;支持的可以给个赞哇。 目录 一、内存和地址 二…

【使用IDEA总结】01——新增作者信息、方法参数返回值

[TOC](目录) 1.类新增作者信息 打开IDEA的Settings&#xff0c;Editor->Code Style->File and Code Templates->Includes->File Header&#xff0c;输入以下作者信息&#xff0c;作者名更换为自己的即可&#xff0c;操作如下图所示 /*** Author Linhaipeng* Date…

实现表达式语言

实现表达式语言 考虑使用大量Scriplet代码嵌入Java代码的JSP页面。过度使用Scriptlet代码使JSP页面变得混乱。因此。开发人员难以阅读和调试页面。另外,网页设计师在编辑表示代码时也会遇到问题。为了解决此类问题,开发无脚本的JSP页面受到推崇。 无脚本的代码使JSP页面易于…

Uipath 实现Excel 文件合并

场景描述 某文件夹下有多个相同结构(标题列相同)的Excel 文件&#xff0c;需实现汇总到一个Excel文件。 常见场景有销售明细汇总&#xff0c;订单汇总等。 解决方案 对于非IT 人员则可使用Uipath 新式Excel活动&#xff0c;通过拖拉实现。也可以通过内存表或使用VB脚本&…

【动态规划初识】不同路径问题

每日一道算法题之不同路径问题 一、题目描述二、思路三、C++代码一、题目描述 题目来源:LeetCode 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finis…

CTFshow web(php文件上传155-158)

web155 老样子&#xff0c;还是那个后端检测。 知识点&#xff1a; auto_append_file 是 PHP 配置选项之一&#xff0c;在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时&#xff0c;PHP 将在执行完脚本文件的所有代码后&…