机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

文章目录

  • 第一关
    • 相关知识
    • 任务要求
    • 代码
  • 第二关
    • 相关知识
    • 任务要求
    • 代码
  • 第三关
    • 相关知识
    • 注意
    • 任务描述
    • 代码

第一关

相关知识

为了完成本关任务,你需要掌握:

在 Python 中使用正则表达式;
最基础正则表达式;
正则匹配函数。
在 Python 中使用正则表达式
正可谓人生苦短,我用 Python。Python 有个特点就是库非常多,自然拥有正则匹配这种常见的库,并且此库已经嵌入在 Python 标准库中,使用起来非常方便,只需要在代码中导入 re 模块即可。

import re
Python 的 re 模块,使得 Python 具备了使用全部正则表达式的功能。为了让我们灵活的使用正则表达式,现在咱们的任务就是学习正则在 re 库中的使用。

最基础正则表达式
正则表达式是一个以简单直观的方式通过寻找模式匹配文本的工具。
听起来比较复杂,实际非常简单,下面开始体验最简单的正则表达式。最简单的正则表达式是些仅包含简单字母数字字符的表达式——不包含任何其他字符,在这种情况下正则表达式完完全全就是一个正常的字符串。

举例说明,我们要匹配 张明,那么 张明 这两个字符就是我们需要的正则表达式。

正则匹配函数
知道了最基础正则表达式,可是如何在 python 中使用了?首先我们学习第一个函数,search() 函数,它的目的是接收一个正则表达式和一个字符串,并返回发现的第一个匹配的字符串。

import re
a = re.search(r'fox','the quick brown fox jumpred')  #第一个参数为正则表达式,第二个参数为要处理的字符串
print(a.span())      # span方法获取的是正则表达式匹配到的位置
b =  re.search(r'www','the quick brown fox jumpred') 
print(b)   #如果匹配不到则会返回None
输出如下:(16, 19)
None
如何匹配到了,我们输出他在正则表达式中的位置,如果没有匹配到,则输出为空。

字符串前缀
在这里插入图片描述

任务要求

本关任务:学会导入 python 的正则表达式库,使用该库方法的 search 方法编写一个匹配小程序。该方法能查看某个学生名字是否在此学生信息中。

根据提示,具体任务如下:

  1. 导入相关包;

  2. 查看此信息是不是 张明 的信息,查找结果存储在 is_zhangming 变量中。

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:张伟 86-14870293148;
预期输出:
None

测试输入:张明;
预期输出:
(0,2)

代码

# coding=utf-8
import re
# 在此导入python正则库check_name = input()
# 在此使用正则匹配'张明'的信息,结果存储到is_zhangming中
########## Begin ##########
is_zhangming=re.search(r"张明",check_name)
########## End ##########if is_zhangming is not None:print(is_zhangming.span())
else:print(is_zhangming)

第二关

相关知识

为了完成本关任务,你需要掌握:

获得多个匹配信息;
字符组。
在上一个任务中,已经了解了只包含简单字母数字的正则表达式,但如果仅仅如此,那么太小瞧正则表达式的威力了。正则表达式强大的地方在于能够指定用于匹配的文本模式。本关来学习正则表达式的字符组匹配。

获得多个匹配信息
在很多常见的场景中需要进行多个匹配,比如在学生名单中过滤出所有的张姓学生的个数。

如果有这种需求咱们可以使用 re 模块中的 findall 或者 finditer方法。两个方法的区别在于 findall 返回的是一个列表,finditer 返回的是一个生成器。

l = re.findall(r'张','张三 张三丰 张无忌 张小凡')
print(l)
['张', '张', '张', '张']
在这个例子中,我们会发现 findall 返回了 4 个“张”,这是因为“张”字在后面的字符串中出现了 4 次。即 findall 返回了所有的匹配信息。

字符组
字符组允许匹配一组可能出现的字符,在正则表达式中用[]表示字符组标志,举个例子。

'I like Python3 and I like python2.7 '
在这句话中,既有大写的 Python,又有全部是小写的 python 。如果我要求都匹配出来,这时候该怎么操作了?这就是正则匹配中字符组的威力了。下面看下示例。a = re.findall(r'[Pp]ython','I like Python3 and I like python2.7 ')
print(a)
['Python', 'python']
可以发现 [Pp] 既可以匹配大写的 P 也可以匹配小写的 p ,这里值的我们注意的是 [Pp] 仅匹配一个字符,他表示匹配在这个[]内的某一个。

任务要求

本关任务:运用正则表达式的字符组表示方法,编写一个能从文本中快速匹配到 python 和 Python 的小程序。
编程要求
根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

从文本中快速匹配到 python 和 Python 的小程序,输出匹配到的所有内容。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:I LIKE Python3 and i like python2.7;
预期输出:
[Python, python]

代码

# coding=utf-8import reinput_str = input()# 编写获取python和Python的正则,并存储到match_python变量中########## Begin ##########
match_python=re.findall(r"[Pp]ython",input_str)########## End ##########print(match_python)

第三关

相关知识

为了完成本关任务,你需要掌握:

区间;
区间取反。
本关来学习正则表达式区间与区间取反的相关知识。

区间
有一些常见的字符组非常大,比如,我们要匹配的是任意数字,如果依照上述代码,每次我们都需要使用 [0123456789] 这种方式明显很不明智,而如果要匹配从 a-z 的字母,我们也这样编写代码的话,肯定会让我们崩溃。

为了适应这一点,正则表达式引擎在字符组中使用连字符(-)代表区间,所以我们匹配任意数字可以使用 [0-9],所以如果我们想要匹配所有小写字母,可以写成 [a-z],想要匹配所有大写字母可以写成 [A-Z]。

可能我们还有个需求:匹配连字符。因为-会被正则表达式引擎理解为代表连接区间,所以这个时候我们需要对-进行转义。

示例:


a = re.findall(r'[0-9]','xxx007abc')
b = re.findall(r'[a-z]','abc001ABC')
c = re.findall(r'[A-Za-z0-9]','abc007ABC')
d = re.findall(r'[0-9\-]','0edu 007-edu')
print(a)
print(b)
print(c)
print(d)
执行结果如下:['0', '0', '7']
['a', 'b', 'c']
['a', 'b', 'c', '0', '0', '7', 'A', 'B', 'C']
['0', '0', '0', '7', '-']

区间取反
到目前为止,我们定义的字符组都是由可能出现的字符定义,不过有时候我们可能希望根据不会出现的字符定义字符组,例如:匹配不包含数字的字符组。


a = re.findall(r'[^0-9]','xxx007abc')
b = re.search(r'[^0-9]','xxx007abc')
print(a)
print(b)
执行结果如下:['x', 'x', 'x', 'a', 'b', 'c']
<re.Match object; span=(0, 1), match='x'>

可以通过在字符数组开头使用 ^ 字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。

接下来再看一个表达式:n[^e] 这意味着字符 n 接下来的字符是除了 e 之外所有的字符。


a = re.findall(r'n[^e]','final')
b = re.search(r'n[^e]','final')
c = re.findall('r[n[^e]]','Python')
print(a)
print(b)
print(c)
执行结果如下:['na']
<re.Match object; span=(2, 4), match='na'>
[]

这里我们可以发现 a 和 b 匹配的是 na,字符 a 因为不是 e 所以可以被匹配,而变量 c 的值为空,在这里正则表达式引擎只匹配到了字符串 n 的位置,而 n 之后没有任何可以匹配 [^e] 的字符了,所以这里也匹配失败。

注意

search是找到第一个匹配的地方,而findall是所有匹配的地方

任务描述

本关任务:运用正则表达式的区间表示方法,编写一个能从文本中快速匹配到数字与不是数字字符的小程序。

编程要求
请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

匹配数字字符信息;

匹配不是数字字符的信息。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:Python3 and python2.7;
预期输出:
[‘3’, ‘2’, ‘7’]
[‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’, ’ ', ‘a’, ‘n’, ‘d’, ’ ', ‘p’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’, ‘.’]

代码

# coding=utf-8import reinput_str = input()# 1、编写获取到数字的正则,并输出匹配到的信息
########## Begin #re#########
a=re.findall(r"[0-9]",input_str)
########## End ##########
print(a)
# 2、编写获取到不是数字的正则,并输出匹配到的信息
########## Begin ##########
b=re.findall(r"[^0-9]",input_str)
########## End ##########
print(b)

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

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

相关文章

1308. 全排列的结果-深度优先搜索-DFS

代码&#xff1a; #include <iostream> using namespace std; int n; int a[10]; bool r[10]; void print(int k) {for(int i1; i<k; i){cout<<a[i]<<" ";}cout<<endl; } void fun(int k) {for(int i1; i<n; i){if(r[i] false){a[k…

第一讲_HarmonyOS应用开发环境准备

HarmonyOS应用开发环境准备 1. 知识储备2. 环境搭建2.1 安装node.js2.2 配置node.js2.3 安装命令行工具2.4 安装DevEco Studio2.5 配置DevEco Studio 1. 知识储备 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可…

给WordPress网站增加一个带时间的led广告牌

WordPress 后台》外观》小工具》自定义html》添加到合适位置 其他系统可自行添加合适位置 <style type"text/css">.studytextgzbox {background: #F9F9F9; border: 1px solid #999999;margin: 1px;text-align:center; float: left;line-height: 28px;hei…

Qt中ComboBox的简单使用

1.相关说明 combobox中item的文字、data、图片设置 2.界面绘制 3.相关主要代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete …

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测 目录 回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测预测效果基本描述程序设计参考资料 预测效果 基本描…

从0开始python学习-48.pytest框架之断言

目录 1. 响应进行断言 1.1 在yaml用例中写入断言内容 1.2 封装断言方法 1.3 在执行流程中加入断言判断内容 2. 数据库数据断言 2.1 在yaml用例中写入断言内容 2.2 连接数据库并封装执行sql的方法 2.3 封装后校验方法是否可执行 2.4 使用之前封装的断言方法&#xff0c…

关于VScode的这个ssh的配置的经验

1.首先&#xff0c;我是因为重装了ubantu系统&#xff0c;不得不重新配置ssh 2.第一步&#xff0c;在本机的终端安装ssh插件&#xff1a; &#xff08;1&#xff09; &#xff08;2&#xff09;restart开启这个ssh端口 3.然后&#xff0c;就在vscode里面&#xff0c;安装哪个…

使用CSS计算高度铺满屏幕

前言 今天写项目时出现高度设置百分百却不占满屏幕&#xff0c;第一反应看自己设置的是块级元素还是行级元素。看了几篇博客&#xff0c;发现并不能解决问题。脱离文档流的做法都没考虑&#xff0c;前期模板搭建脱离文档流&#xff0c;后面开发会出现很多问题。 以上图片是我…

FindMy技术与相机结合

FindMy是苹果公司提供的设备追踪服务&#xff0c;用来帮助用户定位丢失的设备。自苹果公司开放Findmy网络之后&#xff0c;FindMy技术便与各种生活设备相结合&#xff0c;比如与相机的结合。 想象一下&#xff0c;你正在外出办事或者旅行时&#xff0c;突然意识到相机丢了&…

SSR服务端渲染解决了什么问题?有做过SSR吗?

面试官&#xff1a;SSR解决了什么问题&#xff1f;有做过SSR吗&#xff1f;你是怎么做的&#xff1f; 一、是什么 Server-Side Rendering 我们称其为SSR&#xff0c;意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术&#xff0c;发送到浏览器&#xff0c;然…

Unity关于新手引导中实现遮罩镂空效果

在新手引导每一步中实现可以遮掉其他部分而显示当前需要点击的部分&#xff0c;只需要在每一步引导的时候设置对应的镂空区域的RectTransform.效果如下图&#xff1a; 代码&#xff1a; public class SelfMaskSet : MaskableGraphic, ICanvasRaycastFilter {[SerializeField]p…

React的合成事件

合成事件&#xff1a;通过事件委托&#xff0c;利用事件传播机制&#xff0c;当事件传播到document时&#xff0c;再进行分发到对应的组件&#xff0c;从而触发对应所绑定的事件&#xff0c;然后事件开始在组件树DOM中走捕获冒泡流程。 原生事件 —— > React事件 —— >…

macOS 13(本机)golang程序交叉编译成 ARM架构

## 背景 golang程序&#xff08;JuiceFS&#xff09;需要支持ARM64架构&#xff0c;重新编译&#xff1b; 本地环境&#xff1a;macOS&#xff1a;13 ## 操作 安装交叉编译工具&#xff1a; brew install FiloSottile/musl-cross/musl-cross --with-aarch64 可以在 /usr/l…

【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 堆排序 第一种 ​编辑 第二种 …

【征服redis8】Redis的AOF持久化

Redis 支持多种持久化方式来保证数据的可靠性和持久性。前面我们介绍了RDB方式。我们我们介绍第二种方式——AOF&#xff08;Append Only File&#xff09;机制是一种常用的持久化方式&#xff0c;它记录了所有对 Redis 数据库进行修改的命令&#xff0c;在 Redis 重启时可以使…

【办公自动化】利用Python代码暴力破解RAR压缩包的密码

title: 利用Python代码暴力破解RAR压缩包的密码 tags: bigleft excerpt: 利用Python代码暴力破解RAR压缩包的密码 利用Python代码暴力破解RAR压缩包的密码 引言 有时从网盘或p2p下载了几个G的资源&#xff0c;下载了几天&#xff0c;终于下载完成&#xff0c;结果发现来需要密…

【C++入门到精通】智能指针 auto_ptr、unique_ptr简介及C++模拟实现 [ C++入门 ]

阅读导航 引言一、std::auto_ptr1. 简介2. 使用示例3. C模拟实现 二、std::unique_ptr1. 简介2. 使用示例3. C模拟实现 温馨提示 引言 在 C 中&#xff0c;智能指针是一种非常重要的概念&#xff0c;它能够帮助我们自动管理动态分配的内存&#xff0c;避免出现内存泄漏等问题。…

vue3有了解过吗?能说说跟vue2的区别吗?

一、Vue3介绍 关于vue3的重构背景&#xff0c;尤大是这样说的&#xff1a; 「Vue 新版本的理念成型于 2018 年末&#xff0c;当时 Vue 2 的代码库已经有两岁半了。比起通用软件的生命周期来这好像也没那么久&#xff0c;但在这段时期&#xff0c;前端世界已经今昔非比了 在我…

【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:初窥mybatis源码

在历经之前几章课程的深入学习之后&#xff0c;我想我们已经初步掌握了如何运用jdbc连接数据库的技术&#xff1b;同时&#xff0c;我们也实现了利用mybatis框架的能力&#xff0c;甚至尝试着手编写、实现了ORM的框架。我坚信大家对MyBatis的理解和应用已经达到了一定程度。然而…

昇思MindSpore技术公开课——第三课:GPT

1、学习总结 1.1Unsupervised Language Modelling GPT代表“生成预训练”&#xff08;Generative Pre-trained Transformer&#xff09;。GPT模型是由OpenAI公司开发的一种基于Transformer架构的人工智能语言模型。它在大规模文本数据上进行预训练&#xff0c;学习了丰富的语…