如何在 Python 和 Pandas 中使用正则表达式

news2025/1/12 1:34:35

什么是正则表达式

Regex 代表Regular Expression,是一种用于在文本中搜索模式的表达式。简而言之,它将匹配与模式对应的每个单词或单词组。在 Python 中,您可以使用正则表达式来搜索单词、替换单词、匹配一个单词或一组单词。基本上所有事情都可以使用正则表达式,唯一能阻止你的是你的想象力。


文章目录

  • 什么是正则表达式
  • 第一个例子
  • 一、基本标记和模式
  • 二、使用步骤
    • 1.引入库
    • 2.量词
  • 如何在 Pandas 中使用正则表达式


第一个例子

提示:这里可以添加本文要记录的大概内容:

让我们举个例子,找到电子邮件提供商是使用Randommer.io生成的虚假电子邮件列表;

email_list = [ "rosanna_mayer78@yahoo.com" , 
"edmund_haley@hotmail.com" , 
"peyton31@gmail.com" , 
"garnet.ratke77@hotmail.com" , 
"shaun_heathcote@hotmail.com" , 
"andreane68@hotmail. com”、
“rudolph9@gmail.com”、
“oran43@gmail.com”、
“leonel_ferry@gmail.com”、
“virgie20@yahoo.com” ]

首先导入库:第一步是从标准库中导入re包

import re

然后我们写一些代码来遍历列表并在每个字符串中找到一个电子邮件提供商

# For each email in our email list
for email in email_list: 
    
    # Searching for an email provider
    email_match = re.search('@(\S+)',email)
  
    # If there is a match, print it
    if email_match:
        print(email_match.group(1))

让我们解释一下这部分;

re.search('@(\S+)',email)'@(\S+)',email)

re 包中的搜索函数通过此处的输入字符串(电子邮件)扫描匹配我们作为第一个参数(‘@(\S+)’)提供的模式的子字符串。我们在此处提供的模式查找 arobase 符号(@)并捕获组中后面的所有内容,直到遇到空格。圆括号意味着匹配左圆括号和右圆括号之间的子模式的所有内容都是该组的一部分。这里我们的子模式是\S+,其中\S表示非空白字符和+匹配此标记一次或多次。

最后我们的输出是:

yahoo.com 
hotmail.com 
gmail.com 
hotmail.com 
hotmail.com 
hotmail.com 
gmail.com 
gmail.com 
gmail.com 
yahoo.com

提示:以下是本篇文章正文内容,下面案例可供参考

一、基本标记和模式

在 Regex 的世界中存在许多不同的标记和模式,但让我们保持简单。

所有基本字母数字字符都在匹配自身:‘a’、‘2’、“Z”
特殊元字符及其反义词

二、使用步骤

1.引入库

代码如下(示例):

\s -> 空白字符
\S -> 非空白字符
\d -> 数字字符 (0,1,2,3,4,5,6,7,8,9) 
\D -> 非数字字符
\w - > 任何单词
\W -> 非单词
。-> 任意字符
\n -> 新行
\r -> 回车

2.量词

? -> zero or one of the token in front (eg: \d?)-> zero or one of the token in front (eg: \d?)
* -> zero or more of the token in front (eg: z*)
+ -> one or more of the token in front (eg: \S+)
{x} -> match x number of times the token in front (eg: a{5} -> match aaaaa)

其它

^ -> Start of a string
$ -> End of a string
| -> Boolean or condition  (eg: a|b)
[] -> defining a list of token that could be match 
(eg: [A-Za-z] for all letters in both lower and uppercase)

要像我们在示例中所做的那样创建一个组,您需要使用括号并在它们之间写下您的子模式。

您可能已经注意到,在最后一行,我们在 id 1 处打印了组。这是因为重新返回与字符串的总匹配,而不仅仅是我们的组:
在这里插入图片描述

如何在 Pandas 中使用正则表达式

现在让我们举个例子,通过在句子列表中查找价格,在 Pandas 中使用正则表达式。

import pandas as pd 

sentence_dict ={ "Sentence" : [ "I bought it for $100.50" , 
                              "$50 is not worth it" , 
                              "Price: $12" , 
                              "Pricing on demand" ]} 

df = pd.DataFrame(sentence_dict)

现在让我们考虑如何匹配价格?很简单:我们需要一个伟大的团队来捕捉美元符号后的所有数字!但是我们怎么做呢?就在一行中。

df[ '价格' ]=df[ '句子' ]str .extract( r'\$([0-9.]+)' )

这里我们匹配一个美元符号,注意前面有一个反斜杠,这意味着我们想要一个美元符号而不是字符串的开头。然后我们有带括号的组。在里面我们说匹配任何数字(0 到 9)或点,一次或多次。

我们也可以这样写正则表达式,其中\d是任意数字:

df[ '价格' ]=df[ '句子' ]str .extract( r'\$([\d.]+)' )

最后我们的输出是:
在这里插入图片描述
我们有 NaN 的地方,因为在句子中找不到价格。
参考文献:

https://medium.com/mlearning-ai/introduction-to-regex-for-data-scientists-6b4447687655

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

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

相关文章

C语言每日亿题(三)

文章目录一.二分查找二.第一个错误的版本三.搜索插入位置一.二分查找 原题传送门:力扣 题目: 在有序序列中查找,用二分的方法是非常有效的,但仅限于有序,如果是无序,二分查找是用不了的。 现在我直接来…

Spring cloud Ribbon负载均衡实战

Spring cloud Ribbon负载均衡一、简介二、负载均衡不同方案的区别1、集中式负载均衡(服务器负载均衡)2、进程内负载均衡(客户端负载均衡)三、负载均衡策略1、轮询策略(默认)2、权重轮询策略3、随机策略4、最…

导入vue+springboot前后端分离项目

1、环境 1、前端 nodejs 12.1.0vscode或者webstorm 2、后端 jdk1.8maven3.6.3(3以上即可)sqlyogidea 1、导入数据库 点击右键创建同名的数据库 将sql文件导入到数据库中 右键编辑文件,ctrla选中全部语句,ctrlc进行复制&…

Go 实现选择排序算法及优化

Go 实现选择排序算法及优化选择排序图片演示普通算法优化算法小结耐心和持久胜过激烈和狂热。 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现选择排序算法。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者&#xf…

一只脚踏入数据结构的大门,如何用C语言实现一个单链表(超超超详解,我的灵魂受到了升华)

目录 0.前言 1.什么是链表 1.1链表简介 1.2链表的分类 1.3为什么要有链表(vs顺序表) 1.3.1顺序表的缺点 1.3.2 链表的优点 1.3.3 顺序表的优点是链表的缺点 1.4.为什么选择实现结构最简单的单链表 2* 什么是单链表(两种理解逻辑&…

window10+TensorRT-8.2.5.1+yolov5 v6.2 c++部署

一、准备工具 1.1、visual studio下载安装 参考:vs2019社区版下载教程(详细)_Redamancy_06的博客-CSDN博客_vs2019社区版 1.2、显卡驱动cudacudnn安装 参考:win10系统3060显卡驱动cuda11.5cudnn8.3安装_Bubble_water的博客-CS…

手写Spring3(Bean构造函数的类实例化策略)

文章目录目标项目结构一、代码实现1、新增getBean接口2、定义实例化策略接口3、JDK 实例化4、Cglib 实例化5、创建策略调用二、测试1、准备2、测试用例3、测试结果目标 上一篇文章,我们实例化对象,是通过无参的构造方式生成 所以今天是解决包含参数的构…

docker镜像的导入导出,并发布到服务器上

比如我本地的vue项目,先打包编译为一个镜像: docker build -t cvport . 不会编译的可以看我这篇文章:使用docker构建vue项目并成功运行在本地和线上_1024小神的博客-CSDN博客 开始将镜像保存为一个tar文件: docker save -o cvp…

基于java+springmvc+mybatis+jsp+mysql的高校学术交流平台

项目介绍 高校学术交流平台是基于java编程语言,mysql数据库,ssm框架,idea开发工具开发,本系统有管理员和用户两个角色,其中用户可以注册登陆系统,查看校园资讯,学术交流帖子,发布帖…

Akka 学习(五)消息传递的方式

目录一 消息传递方式1.1 消息不可变1.2 ASK消息模式1.3 Tell消息模式1.4 Forward消息模式1.4 Pipe消息模式有4种核心的Actor消息模式:Tell、Ask、Forward和Pipe。一 消息传递方式 在这里,将从Actor之间发送消息的角度来介绍所有关于消息传递的概念。 ● …

【多线程(六)】并发工具类的基本使用、ConcurrentHashMap1.7版本及1.8版本底层原理分析

文章目录6.并发工具类6.1 并发工具类-Hashtable6.2 并发工具类-ConcurrentHashMap基本使用6.3 并发工具类-ConcurrentHashMap1.7原理6.4 并发工具类-ConcurrentHashMap1.8原理6.5 并发工具类-CountDownLatch6.6并发工具类-Semaphore总结6.并发工具类 6.1 并发工具类-Hashtable…

一文看懂MySQL中order by排序语句的原理

order by 是怎么工作的? 表定义 CREATE TABLE t1 ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city)) ENGINEInnoDB;SQL语句可以…

零基础入门JavaWeb——Vue的生命周期

一、概念 在编程领域,生命周期是一个很常见的概念。一个对象从创建、初始化、工作、释放、清理和销毁,会经历很多环节的演变。 二、Vue对象的生命周期 三、生命周期钩子函数 Vue允许在特定的生命周期环节中通过钩子函数加入我们的代码。 3.1 示例代码…

基于双向LSTM模型进行电力需求预测(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🎉作者研究:🏅🏅🏅主要研究方向是电力系统和智能算法、机器学…

尚硅谷笔记——求和案例纯react版、redux精简版

家人们天气冷啦注意保暖呀,不要像我一样因为冷而不想起床学习,冬日里也不能放弃训练 看了两遍尚硅谷的redux课程,把reduc案例代码重新敲了一次为了加深印象还是写个播客把,强烈推荐大家看尚硅谷课太细致啦 redux 是什么&#x…

即将到来的2023,国内元宇宙开始“割”企业了?

元宇宙爆火一年后,UTONMOS即将成为全球化全部实现ERC-721协议NFT链上垂直游戏价值生态的系统平台,旨在通过利用自身所拥有的各类头部资源和游戏化打造内容层的融合,建立一个元气满满的元宇宙Web3.0平台。 通过数字藏品技术的应用&#xff0c…

Flask框架

Flask一 前言二 快速使用三 内置配置变量四 配置文件的写法五 路由六 cbv写法6.1 快速使用6.2 cbv加装饰器6.3 as_view的执行流程6.4 as_view的name参数6.5 继承View写cbv七 模板语法7.1 渲染变量7.2 变量的循环7.3 逻辑判断一 前言 Flask是一个基于Python开发并且依赖jinja2模…

Fluent中模型设置和数据的复用

1 背景 在实际工程中,必然存在利用仿真比较各类设计方案优劣的场景。 对于复杂模型,逐个设置各个设计方案的仿真模型并从头开始计算结果,既易错也耗时。因此需要通过模型设置和数据的复用,达到防错和提高工作效率。 2 模型设置复…

基于Docker做MySQL主从搭建与Django的读写分离

目录 基于Docker做MySQL主从搭建 django读写分离 基于Docker做MySQL主从搭建 主从的作用:写数据数据时使用主库,从库只用来读数据,这样做能够减少数据库压力,主从搭建可以一主一从,也可以是一主多从。 mysql主从配…

肝2022世界杯,怒写企业级镜像私仓Docker+Harbor实践

2022-12-09 揭幕2022卡塔尔世界杯4强角逐的第一天,越来越精彩了 同时记录程序猿的成长~ 1.背景 由于期望搭建一个企业级CICD的环境,开始尝试常规的gitlabjenkinsk8sdocker harborspringboot开始练手 其中版本如下: 1.gitlab: GitLab Com…