【NLP实战】Python字符串处理

news2024/9/25 11:15:34

一、Python字符串基本操作

1. 去掉前后的特殊字符(strip)

Python的strip操作可以去除字符串前后的空格(不改变原串)下例将前后的空格均删掉👇

str = ' 人工智能 '
str.strip()   # OUT:'人工智能'

rstrip删除右边的空格,保留左边的空格:

str.rstrip()  # OUT:' 人工智能'

lstrip删除左边的空格,保留右边的空格:

str.lstrip()  # OUT:'人工智能 '

strip还可以指定任意形式的字符,将字符串前后的该字符都删掉

str = 'AAA我爱人工智能AA'
str.strip('A')   # OUT:'我爱人工智能'

2. 替换操作(replace)

使用replace把所有的 ’ 我 ’ 改成 ‘你’(替换全部!!):

str = '我爱人工智能,我爱深度学习'
str.replace('我','你')  # OUT:'你爱人工智能,你爱深度学习'

使用replace把我替换成None,即相当于删除全部的 ‘ 我 ’:

str = '我爱人工智能,我爱深度学习'
str.replace('我','')   # OUT:'爱人工智能,爱深度学习'

3. 查找操作(find操作)

find()方法语法:
str.find(str, beg=0, end=len(string))
str —— 指定检索的字符串
beg —— 开始索引,默认为0。
end —— 结束索引,默认为字符串的长度。

【如果包含子字符串返回开始的索引值,否则返回-1。】

str = '我爱人工智能,我爱深度学习'
str.find('爱')  # 返回的是第一个出现‘爱’的索引  OUT : 1

4. 判断操作 (is~~~)

isalpha: 如果字符串至少有一个字符并且所有字符都是字母或文字则返回 True,否则返回 False
str = 'a习'
str.isalpha()  # OUT : True  但是在后面加个空格就是false了
str = 'a112'
str.isdigit()  # OUT:False

5. 分割合并操作

str = '我爱 人工智能,我爱 深度学习'
str.split(' ')   # OUT:['我爱', '人工智能,我爱', '深度学习']

上例表示将字符串,按照空格为分隔符,将字符串切分,输出是一个list结构,将分割后的每个结果作为list中的一个元素,但是原始的str仍未改变,仍然是 ‘我爱 人工智能,我爱 深度学习’ , 而非list,要想让原始的str更改为list,则需要自行赋值。

str = str.split(' ')  # 现在,str是['我爱', '人工智能,我爱', '深度学习']了

下面将list中的元素进行合并, 同时指定合并时的分隔符 (join)

' '.join(str)  # OUT:'我爱 人工智能,我爱 深度学习'

如果不需要分割符,只需要合并,则将指定分隔符发位置置为空即可。【置为None并不是空格

''.join(str)  # OUT : '我爱人工智能,我爱深度学习'

二、正则表达式

1. 基本介绍

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式通常用于数据预处理时对文本进行筛选,获得我们所需要的信息,例如:只要数字、字母。
在这里插入图片描述

2. 正则表达式操作

(1)基本匹配操作

Python正则表达式

(1)指定好匹配的模式 —— pattern
(2)选择相应的方法 —— match, search等
(3)得到匹配结果 —— group等
re.match: # 从开始位置开始匹配,如果开头没有则无
re.search: # 搜索整个字符串
re.findall: # 搜索整个字符串,返回一个list

import re
str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'.')
re.findall(pattern, str)

在这里插入图片描述
上面表格中提到,‘.’ 可以匹配除 ‘\n’ 外的字符。因此上例中将每个字符都输出出来(list形式)。👇下例展示了可以在[ ]内指定字符进行筛选。

str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'[abc]')
re.findall(pattern, str)  # OUT: ['a', 'b', 'c']

可以发现,当需要匹配的字符过多时,都塞在[ ]内肯定不是长久之计,因此这就体现了正则表达式的妙处。

[abc指定包含字符]
[a-zA-Z]来指定所有英文字母的大小写
[^a-zA-Z]不匹配所有的英文字母
str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'[a-zA-Z]')
re.findall(pattern, str)  # OUT : ['a', 'b', 'c', 'k']
str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'[^a-zA-Z]')
re.findall(pattern, str)

在这里插入图片描述

(2)或方法

或方法,将两个规则并起来,以’|'连接,表示只要满足其中之一就可以匹配。

str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'[a-zA-Z]|[0-9]')
re.findall(pattern, str)  
# OUT : ['9', 'a', 'b', 'c', '2', '1', '5', '6', '7', 'k', '8']

3. 正则常用符号

在这里插入图片描述
注:\w其实也包括匹配汉字,只是通常都采用英文的字符串。

# 例如:'\d'匹配数字,等价于p [0-9]
str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'\d')
re.findall(pattern, str)  # OUT : ['9', '2', '1', '5', '6', '7', '8']

4. 特殊字符

在这里插入图片描述

# 0次或多次
str = '人工智能很简单 。 9abc21567k8'
pattern = re.compile(r'\d*')
re.findall(pattern, str)   
# OUT : ['', '', '', '', '', '', '', '', '', '', '9', '', '', '', '21567', '', '8', '']
# 1次或多次
pattern = re.compile(r'\d+')
re.findall(pattern, str)   # OUT : ['9', '21567', '8']
# 0次或1次
pattern = re.compile(r'\d?')
re.findall(pattern, str)

在这里插入图片描述
不仅如此,'{m}'可以精确匹配 m 次:👇

str = '人工智能很简单 。 9abc215k856'
pattern = re.compile(r'\d{3}')
re.findall(pattern, str)   # OUT : ['215', '856']

'{m,n}'可以精确匹配最少 m 次, 最多n 次:👇

str = '人工智能很简单 。 9abc215k856'
pattern = re.compile(r'\d{1,3}')
re.findall(pattern, str)  # OUT : ['9', '215', '856']

5. match & search

它们的返回不是一个简单的字符串列表,而是一MatchObject,可以得到更多的信息。如果匹配不成功,它们则返回一个NoneType。所以在对匹配完的结果进行操作之前,必需先判断一下是否匹配成功了。
skill:在实际任务中,通常加if判断,如果找到了,再继续,防止NoneType带来奇妙的问题

match 从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而search会跳过开头,继续向后寻找是否有匹配的字符串。
input = '12人工智能很简单'
pattern = re.compile(r'\d')
match = re.match(pattern, input)
match.group()   # OUT : '1'

6. 字符串的替换 & 修改

在目标字符串中规格规则查找匹配的字符串,再把它们替换成指定的字符串。你可以指定一个最多替换次数,否则将替换所有的匹配到的字符串。

sub ( rule , replace , target [,count] )
subn(rule , replace , target [,count] )
第一个参数是正则规则,第二个参数是指定的用来替换的字符串,第三个参数是目标字符串,第四个参数是最多替换次数。
sub返回一个被替换的字符串。
subn返回一个元组,第一个元素是被替换的字符串,第二个元素是一个数字,表明产生了多少次替换。
input = '123人工智能很简单'
pattern = re.compile(r'\d')
re.sub(pattern,'学习' ,input)   # OUT : '学习学习学习人工智能很简单'
input = '123人工智能很简单'
pattern = re.compile(r'\d')
re.subn(pattern,'学习' ,input)   # OUT : ('学习学习学习人工智能很简单', 3)

SUM: 上例表明,实际上sub和subn几乎一样,只是subn多返回了一个替换的次数。

7. 切片(split)

split切片函数。使用指定的正则规则在目标字符串中查找匹配的字符串,用它们作为分界,把字符串切片。

split( rule , target [,maxsplit])
第一个参数是正则规则,第二个参数是目标字符串,第三个参数是最多切片次数,返回一个被切完的子字符串的列表。
input = '自然语言处理123人工智能456深度学习'
pattern = re.compile(r'\d+')
re.split(pattern, input)    # ['自然语言处理', '人工智能', '深度学习']

8. '(?P…)'命名组

'(?P…)'是命名组,其中,<…>里面是给这个组起的名字。

input = '自然语言处理123人工智能456深度学习'
pattern = re.compile(r'(?P<hh>\d+)(?P<uu>\D+)')
m = re.search(pattern, input)
m.group('hh')    # OUT : '123'
str = 'number 863-996-785'
pattern = re.compile(r'(\d\d\d-\d\d\d-\d\d\d)')
m = re.search(pattern, str)
m.groups()   # OUT : ('863-996-785',)

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

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

相关文章

linux016之安装JDK

linux上安装JDK&#xff1a; 一&#xff1a;首先检查一下linux上是否已经安装有jdk rpm -qa | grep jdk &#xff1a;查询目前系统已安装的jdk&#xff0c;直接复制该命令执行&#xff0c;如下图就是系统已经安装好的JDK rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps &…

线段树(维护区间信息)

一&#xff0c;定义&#xff1a; 可以在logN时间内实现区间修改&#xff0c;单点修改&#xff0c;区间查询等操作的工具 二&#xff0c;思路&#xff08;修改无乘法时&#xff09;&#xff1a; 1&#xff0c;建树 通过把区间不断二分建立一颗二叉树 我们以维护一个数组a{1…

流程引擎之compileflow简介

背景compileflow 是一个非常轻量、高性能、可集成、可扩展的流程引擎。compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一&#xff0c;是专注于纯内存执行&#xff0c;无状态的流程引擎&#xff0c;通过将流程文件转换生成 java 代码编译执行&#xff0c;简洁高效。当前是阿…

JVM内存布局

JVM的主要组成&#xff1a;JVM包含俩个子系统和俩个组件&#xff0c;俩个子系统为Class loader&#xff08;类装载&#xff09;、Execution engine&#xff08;执行引擎&#xff09;&#xff1b;俩个组件为Runtime data area&#xff08;运行时数据区&#xff09;、Native Inte…

认证全家桶(Cookie、Session、Token、JWT)

什么是认证(Authentication) 通俗地讲就是验证当前用户的身份&#xff0c;证明“你是你自己”&#xff08;比如&#xff1a;你每天上下班打卡&#xff0c;都需要通过指纹打卡&#xff0c;当你的指纹和系统里录入的指纹相匹配时&#xff0c;就打卡成功&#xff09;互联网中的认…

independentsoft.de/MSG .NET Framework Crack

MSG .NET 是用于 .NET Framework / .NET Core 的 Microsoft Outlook .msg 文件 API。API 允许您轻松创建/读取/解析/转换 .msg 文件等。API 不需要在机器上安装 Microsoft Outlook 或任何其他第三方应用程序或库即可工作。 以下示例向您展示了如何打开现有文件并显示消息的某些…

sklearn学习-线性回归大家族

文章目录一、多元线性回归二、回归类的评估指标三、多重共线性&#xff1a;岭回归和Lasso四、Lasso选取最佳的正则化参数取值总结一、多元线性回归 二、回归类的评估指标 三、多重共线性&#xff1a;岭回归和Lasso 多重共线性 Multicollinearity 与 相关性 Correlation: 多重共…

达梦8共享存储集群DSC

简介&#xff1a; DM 共享存储数据库集群的英文全称 DM Data Shared Cluster&#xff0c;简称 DMDSC。 熟悉Oracle的朋友会知道目前国产数据库只有达梦数据库有共享存储集群架构&#xff0c;Oracle通过私网进行不同节点之间的缓存融合&#xff0c;而达梦通过自己的MAL系统&…

Java牛客编程刷算法记录--2022-12-7+2023-2-19

https://www.nowcoder.com/ta/classic-code 牛客上经典必刷题库 https://www.nowcoder.com/practice/e08819cfdeb34985a8de9c4e6562e724?tpId46&tqId29030&rp1&ru/ta/classic-code&qru/ta/classic-code&difficulty&judgeStatus&tags/question-ran…

Android自动化配置

1 搭建APPIUM环境 1.1 安装node.js Appium是使用nodejs实现的&#xff0c;所以node是解释器&#xff0c;需要第一步安装好 node.js的安装包下载地址&#xff1a; https://nodejs.org/en/download/ 注意&#xff1a;node.js的安装包的下载在官网有两种版本&#xff0c;建议大…

基于FFmpeg实现的无声音屏幕录制

UI自动化测试时&#xff0c;有时需要进行录屏操作&#xff0c;这时我们是不需要声音的&#xff0c;我们可以通过FFmpeg进行简单的录制工作。 以下是在windows10环境下&#xff0c;基于FFmpeg实现的简单录制&#xff1a; Ffmpeg简介&#xff1a; 功能&#xff1a;有非常强大的…

Spring Cloud Nacos实战(六)- 集群架构说明与持久化配置切换

目录Nacos集群架构说明Nacos支持三种部署模式集群部署说明预备环境Nacos持久化切换配置Nacos持久化配置Nacos默认derby切换MySql测试Nacos集群架构说明 ​ 到目前为止&#xff0c;我们已经对Nacos的一些基本使用和配置已经掌握&#xff0c;但是这些还不够&#xff0c;我们还需…

算法导论【时间复杂度】—排序算法、图算法、动态规划、字符串匹配等时间复杂度小结

算法导论【时间复杂度】—排序算法、图算法、DP等小结排序快速排序堆排序计数排序基数排序桶排序SELECT算法RANDOMIZED-SELECTSELECT图算法广度优先搜索深度优先搜索Kruskal算法Prim算法Bellman-Ford算法Dijkstra算法Floyd-Warshall算法Johnson算法Ford-Folkson方法Edmonds-Kar…

基于Redis实现的分布式锁

基于Redis实现的分布式锁什么是分布式锁分布式锁主流的实现方案Redis分布式锁Redis分布式锁的Java代码体现优化一&#xff1a;使用UUID防止误删除优化二&#xff1a;LUA保证删除原子性什么是分布式锁 单体单机部署中可以为一个操作加上锁&#xff0c;这样其他操作就会等待锁释…

网络安全-FOFA资产收集和FOFA API调用

网络安全-FOFA资产收集和FOFA API调用 前言 一&#xff0c;我也是初学者记录的笔记 二&#xff0c;可能有错误的地方&#xff0c;请谨慎 三&#xff0c;欢迎各路大神指教 四&#xff0c;任何文章仅作为学习使用 五&#xff0c;学习网络安全知识请勿适用于违法行为 学习网络安全…

Android OTA升级常见问题的解决方法

1.1 多服务器编译 OTA 报错 Android7 以后引入了 jack-server 功能&#xff0c;也导致在公共服务器上 编译 Android7 以上的版本时&#xff0c;会出现 j ack-server 报错问题。 在多用户服务器上 编译 dist 时 会出现编译过程中 会将 port_service 和 port_admin 改为 默认的 …

Go语言Web入门之浅谈Gin框架

Gin框架Gin简介第一个Gin示例HelloworldRESTful APIGin返回数据的几种格式Gin 获取参数HTTP重定向Gin路由&路由组Gin框架当中的中间件Gin简介 Gin 是一个用 Go (Golang) 编写的 web 框架。它是一个类似于 martini 但拥有更好性能的 API 框架&#xff0c;由于 httprouter&a…

MySQl----- 单表查询

表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar…

【Spark分布式内存计算框架——Spark SQL】11. External DataSource(中)parquet 数据

6.3 parquet 数据 SparkSQL模块中默认读取数据文件格式就是parquet列式存储数据&#xff0c;通过参数【spark.sql.sources.default】设置&#xff0c;默认值为【parquet】。 范例演示代码&#xff1a;直接load加载parquet数据和指定parquet格式加载数据 import org.apache.s…

事物发展的不同阶段会有不同的状态

之前讨论过一个话题&#xff0c;有人问“股票交易稳定盈利很难么&#xff1f;” 我的回答&#xff1a;不难&#xff0c;难在之前。 这几天我又想到经常看到论坛里有人pk观点&#xff0c;最后甩出一句话&#xff1a;“证明你说得对&#xff0c;你先赚一个亿再说。否则&#xf…