本篇文章主要讲解一些基础的python正则表达式的应用,以及re模块中的几个方法,关于正则表达式和个函数的详细解释,参看链接:Python 正则表达式,这个网址讲述的非常清楚,我这篇文章只是为了更清晰的讲述一下它的应用。需要先掌握的几个函数为 re.match()、 re.dearch()、re.compile()、re.findall()、re.finditer()、内置函数replace()、strip(),在上边的链接里都有,我再赘述没有什么意义。

首先我们从一个问题出发,来看一下我们为什么要用正则表达式。今天我要预处理些评论数据,数据的形式见下图,我的需求主要有以下几个:

        ①去除评论中的换行符、空格、tab空格等格式;
        ②去除评论中的""最满意"": 、 ""最不满意"":、 ""空间"":等标签(包括冒号);
        ③去除评论中的一些标点符号如句号、引号、括号、破折号等;
        ④对句子进行简单的拆分。

可以看出,我希望对于文本的处理是比较细粒度的,已经具体到某些特定的文字表达了,这个时候我们想要使用一种通用、简单、有效的方法进行文本预处理,那最好就用正则表达式,它在更为经典的语言中被设计来就是用于文本匹配与处理的。

正则表达式就是通过匹配的方式来查找目标文本中对应的短语或符号,再针对匹配到的字符进行删除、修改、替换等操作。简言之,就是用正则表达式的语言查找人类语言中对应的句子。举个例子我想要找到上图中""最满意""(包括英文的引号)对应的汉字及标点符号,那么与之匹配的正则表达式可以是   '.*:'  或者  '\"(.*)\".[::]'  ,具体使用哪种形式还需要看你想要处理的文本的特征。我来举两个例子:

(1)例一:假如我的句子为:""最满意"" : ""最满意的还是动力,可能因为之前1.4T的凌度排量较,开上2.0T哪动力感觉好辣眼睛。

那么这个时候我们用两种方式进行匹配都可以,如下。可以看到两种方式都能匹配到我们想要的字符串。

(2)例二:假如我的句子为:我的观点如下:""最满意"" : ""最满意的还是动力,可能因为之前1.4T的凌度排量较,开上2.0T哪动力感觉好辣眼睛。

那么这个时候我们就能看出来差别了,很明显第一种方式匹配的更加精准。

我们可以分析一下上边提到的两个正则表达式,就知道是什么原因了。

(3)表达式解析

'.*:'   解析:

  • “.”可以匹配除了“\n”之外的任何单个字符(如果想要包括“\n”,需要使用“[.\n]”);
  • “*”可以匹配“*”前面0个或多个正则表达式(例如这里的“.*”就可以代表0个或多个“.”,而每一个“.”又可以代表任何除换行以外的字符);
  • “:”就代表的中文的冒号(注意正则表达式中的标点一般都区分中文的还是英文的,但是有一些例如减号、等号等不区分)。

'\"(.*)\".[::]'   解析:

  • “\"”代表的就是英文的双引号,前面的斜杠是转义字符(这里需要注意英文的单双引号、以及一些整么表达式模式如“^”、“.”如果想要表达的实际上就是这些符号,需要加上转义字符);
  • “(.*)”含义见上;
  • “[::]”中的方括号表示的是一个或的关系,表示方括号内符号中的任意一个。

另外,有时我们可能要删除句子中的“\”,这个时候我们的正则表达式可以写成r'\',前面的r就是让python忽略正则表达式中的转义字符,这时候我们就能匹配到斜杠了。

最后,针对文首的四个需求,我写了如下代码来处理我的评论,可能结构写的不好,但是可以作为参考。

(1)首先是数据清洗的,这个先后顺序不是随便的,正则表达式以及处理顺序需要根据你的文本的特点自行调整。

 def review_pro(self):# 数据清洗,输入输出均为单行文本n_review = re.sub('[{}\"\s]+', '', self.review)  # 去除大括号、换行、空格等nn_review = n_review.replace(re.search('....:', n_review).group(), "")  # 去除标题“最不满意:”removed_review = re.sub('(..:)|(...:)', '', nn_review)  # 去除其它标题return removed_review

(2)然后是分句的,我这里分句后还想保留原来的标点符号,所以多了两步处理,利用split()函数后又把标点加了回去。

 def split_review(self):# 分句,输入输出均为text文档split_text = []with open(self.input_address, encoding='utf-8') as f:for line in f:split_row = re.split(r'([;。!??!])', line.replace("\n", ""))pun_num = re.findall(r'([;。!??!])', line)for i in range(len(split_row) - len(pun_num)):if re.match(r'([;。!??!])', split_row[i]):split_row[i - 1] += split_row[i]split_row.remove(split_row[i])for row in split_row:split_text.append(row)f.close()

利用正则表达式以及re模块进行一些文本处理工作(应用说明)相关推荐

  1. python从文件中提取特定文本_python利用正则表达式提取文本中特定内容

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...

  2. 【超详总结/理解:正则表达式】特点/元字符/正则表达式中的标志位-flag/RegExp/重复操作与后向引用/匹配模式/表达邮箱/正则表达式对象的方法/利用正则表达式限制网页表单里的文本框输入内容

    文章目录 正则表达式: 正则表达式的用途 正则表达式的组成-元字符 正则表达式的特点 正则表达式中的标志位-flag JavaScript中的正则表达式解析 RegExp 定义 RegExp RegE ...

  3. pandas 利用 正则表达式 从文本中提取数字

    需要从text特征中提取形如 13.5/10 这样的字符串,再分别提取分子分母. 1)可以利用 str.extract() 方法. 2)利用正则表达式 \d+\.?\d*\/\d+ 进行匹配 3)再利 ...

  4. Python爬虫学习笔记-第六课(正则表达式下+csv模块的使用)

    正则表达式下+csv模块的使用 1. re模块方法补充 1.1 compile()方法 1.2 search()和findall()方法 1.3 split()方法 1.4 sub()方法 2. re ...

  5. 利用python的selenium模块向Plant-mPLoc提交数据

    利用python的selenium模块向Plant-mPLoc提交数据 流程一般步骤 1.对数据的预处理 2. 环境的配置 3.代码分析及流程思想 回顾和展望 流程一般步骤   首先我们对得到的序列预 ...

  6. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

  7. 深度学习核心技术精讲100篇(二十七)-如何利用NLP技术对ASR的query文本进行预处理纠错?

    前言 语音系统中语音内容识别 ( ASR ) 的精准性,是影响智能语音产品发展的关键制约因素,用户query的文本,通常是由ASR系统将用户的语音命令转换而成,但由于技术上的原因,这些由ASR生成的文 ...

  8. python textwrap_python2.7.3编译python模块学习- textwrap 文本包装和填充

    python模块学习- textwrap 文本包装和填充 代码实例: sample_text = ''' The textwrap module can beused to format text f ...

  9. java 取文本中间_Java 如何利用正则表达式提取两个指定标记符号之间的字符串内容...

    Java 开发中,我们往往需要从非结构化的文本数据中截取两个特定字符之间的内容,可以利用正则表达式获取其间信息. 解决方法 将正则表达式用 Pattern 类的静态方法 compile 一个对象,该对 ...

最新文章

  1. 计算机专业认证协会,我校计算机科学与技术专业接受教育部中国工程教育专业认证协会专家组现场考查...
  2. python gpu加速 显卡_PyTorch-GPU加速实例
  3. C#.NET编程----Spring.NET NHibernate整合
  4. nltk download失败
  5. 大脚导入配置选择哪个文件_有史以来最全的 IntelliJ IDEA 配置图解
  6. 关于Android studio run 按钮灰色无法运行的总结
  7. 利用MFC调用libvlc.dll作一个简单的播放器
  8. redis主从配置及无法连接处理
  9. 三种方法实现轮播图配置,史上最简方法~
  10. 良好的用户界面设计技巧
  11. html 关于一行两列 高度不定的实现(不用table)
  12. 如何应对倒戈的员工?
  13. putty mtputty 设置utf8编码
  14. java 线程condition_(七)java多线程之Condition
  15. 身份证前六位地址验证
  16. 动画程序时长缩放是什么意思_Premiere视频剪辑教程8:PR关键帧动画,让你的图片和文字动起来...
  17. Markdown开发VSCode插件推荐
  18. 【Rocksdb实现分析及优化】事务之Pessimistic ①
  19. 为什么世界 500 强企业在逐步淘汰传统绩效考核
  20. 用SPSS对参数进行正态性检验

热门文章

  1. 自考计算机基础00018难吗,自考公共课00018-计算机应用基础(看完必过).doc
  2. 专业词汇解释:耦合性、耦合度(Coupling)
  3. Java编程 | 冒泡排序
  4. 热爱公益——记菏泽市蓝鸟志愿救援中心王飞
  5. 2021年质量员-市政方向-通用基础(质量员)最新解析及质量员-市政方向-通用基础(质量员)复审考试
  6. 模型压缩:如何在压缩后保持模型的精度和速度
  7. idea 布署web项目
  8. 华钜同创:跨境运营培训班教你如何应对成本上涨
  9. 【论文阅读笔记】里程计ODO/INS不同融合方式的性能比较
  10. 求解最大连续子序列和问题(Java)蛮力法+分治法