酷站(www.ku0.com)-致力于为互联网从业者提供动力!

热门关键词:  企业  as  baidu  c4rp3nt3r  美女
【阿里云】采购季上云仅¥223/3年

Python中正则表达式的巧妙使用一文包你必掌握正则

来源:互联网搜集 作者:秩名 人气: 发布时间:2019-05-27
本篇文章主要介绍了Python中正则表达式的巧妙使用一文包你必掌握正则,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

正则表达式就是从字符串中发现规律,并通过“抽象”的符号表达出来。打个比方,对于2,5,10,17,26,37这样的数字序列,如何计算第7个值,肯定要先找该序列的规律,然后用n2+1这个表达式来描述其规律,进而得到第7个值为50。

对于需要匹配的字符串来说,同样把发现规律作为第一步,本文主要使用正则表达式完成字符串的查询匹配、替换匹配和分割匹配。


常用的正则符号

在进入字符串的匹配之前,先来了解一下都有哪些常用的正则符号,见下表所示:
 


 

如果读者能够比较熟练地掌握上表中的内容,相信在字符串处理过程中将会游刃有余。如前文所说,本节将基于正则表达式完成字符串的查询、替换和分割操作,这些操作都需要导入re模块,并使用如下介绍的几个函数。

字符串的匹配查询

re模块中的findall函数可以对指定的字符串进行遍历匹配,获取字符串中所有匹配的子串,并返回一个列表结果。该函数的参数含义如下:

findall(pattern, string, flags=0)

pattern:指定需要匹配的正则表达式。

string:指定待处理的字符串。

flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是让正则表达式对大小写不敏感;re.M的模式是让正则表达式可以多行匹配;re.S的模式指明正则符号.可以匹配任意字符,包括换行符 ;re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。

字符串的匹配替换

re模块中的sub函数的功能是替换,类似于字符串的replace方法,该函数根据正则表达式把满足匹配的内容替换为repl。该函数的参数含义如下:

sub(pattern, repl, string, count=0, flags=0)

pattern:同findall函数中的pattern。

repl:指定替换成的新值。

string:同findall函数中的string。

count:用于指定最多替换的次数,默认为全部替换。

flags:同findall函数中的flags。

字符串的匹配分割

re模块中的split函数是将字符串按照指定的正则表达式分隔开,类似于字符串的split方法。该函数的具体参数含义如下:

split(pattern, string, maxsplit=0, flags=0)

pattern:同findall函数中的pattern。

maxsplit:用于指定最大分割次数,默认为全部分割。

string:同findall函数中的string。

flags:同findall函数中的flags。

实战案例

如果上面的函数和参数含义都已经掌握了,还需要进一步通过案例加强理解,接下来举例说明上面的三个函数:
 

# 导入用于正则表达式的re模块 
import re 
# 取出字符串string8中所有的天气状态 
string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
# 基于正则表达式使用findall函数 
print(re.findall("tianqi:'(.*?)'", string8)) 
# 取出string9中所有含O字母的单词 
string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'
# 基于正则表达式使用findall函数 
print(re.findall('w*ow*',string9, flags = re.I)) 
# 将string10中的标点符号、数字和字母删除 
string10 = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'
# 基于正则表达式使用sub函数 
print(re.sub('[,。、a-zA-Z0-9()]','',string10)) 
# 将string11中的每个子部分内容分割开 
string11 = '2室2厅 | 101.62平 | 低区/7层 | 朝南 
 上海未来 - 浦东 - 金杨 - 2005年建' 
# 基于正则表达式使用split函数 
split = re.split('[-| 
]', string11) 
print(split) 
# 分割结果的清洗 
split_strip = [i.strip() for i in split] 
print(split_strip) 
out: 
['晴', '阴~小雨', '小雨~中雨', '中雨~小雨'] 
['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of'] 
据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊耳载荷试验叠装试验等验收试验 
['2室2厅 ', ' 101.62平 ', ' 低区/7层 ', ' 朝南 ', ' 上海未来 ', ' 浦东 ', ' 金杨 ', ' 2005年建'] 
['2室2厅', '101.62平', '低区/7层', '朝南', '上海未来', '浦东', '金杨', '2005年建']

如上结果所示,在第一个例子中通过正则表达式"tianqi:'(.*?)'"实现目标数据的获取,如果不使用括号的话,就会产生类似"tianqi:'晴'", "tianqi:'阴~小雨'"这样的值,所以,加上括号就是为了分组,且仅返回组中的内容;

第二个例子并没有将正则表达式写入圆括号,如果写上圆括号也是返回一样的结果,所以findall就是用来返回满足匹配条件的列表值,如果有括号,就仅返回括号内的匹配值;

第三个例子使用替换的方法,将所有的标点符号换为空字符,进而实现删除的效果;

第四个例子是对字符串的分割,如果直接按照正则 '[,。、a-zA-Z0-9()]' 分割的话,返回的结果中包含空字符,如 '2室2厅' 后面就有一个空字符。为了删除列表中每个元素的首尾空字符,使用了列表表达式,并且结合字符串的strip方法完成空字符的压缩。
 

版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:http://developer.51cto.com/art/201905/596697.htm

相关文章

  • layui正则表达式验证使用介绍

    layui正则表达式验证使用介绍

    前言 layui的正则表达式是在form表单中完成的。所以第一步要在你的html中加上指定的form 。 官方参考文档:https://www.layui.com/doc/element/form.html 要保证引用的layui模块中有form.js存在。 快速步骤引用form.js添加form标签,并设......
    04-21
  • js中的正则表达式入门的知识点总结

    js中的正则表达式入门的知识点总结

    什么是正则表达式呢? 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。 先科普一下基本的知识 js中使用正则表达......
    04-20
  • 正则表达式替换table表格中的样式与空标记(保留rowspan与colspan

    正则表达式替换table表格中的样式与空标记(保留rowspan与colspan

    完整测试代码 scriptvar str=p;str=table id=tblSort cellspacing=0 helvetica= sans=tr id=sdftd style=color:red class=ok colspan=8 height=500 rowspan=5;str+=td style = color:blue style=color:blue colspan=8 style=color:red ro......
    04-20
  • 教你学会正则表达式!(来自Github)

    教你学会正则表达式!(来自Github)

    推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:http://www.pyregex.com/ Regexper:http://www.regexper.com/ 正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则表达式被......
    04-09
  • 正则表达式+Python re模块的介绍

    正则表达式+Python re模块的介绍

    正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 通过正则表达式可以对指定的文本实现 匹配测试、内容查找、内容替换、字符串......
    03-27
  • linux grep不区分大小写查找字符串的方法介绍

    linux grep不区分大小写查找字符串的方法介绍

    正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。 在Python中,我们通过调用re库来使用re模块: import re 正则表达式语法模式和操作符详见: https://www.runoob.co......
    03-14
  • 详解linux grep与正则表达式使用

    详解linux grep与正则表达式使用

    grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDST......
    03-08
  • linux grep不区分大小写查找字符串的方法

    linux grep不区分大小写查找字符串的方法

    grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i。 一、查看grep工具版本方法 图1 grep版本查询 二、grep -i 使用方法 图2 grep不区分大小写 备注: grep使用方法: grep [选项] ......
    03-08
  • 详解正则表达式[\s\S]*与[\w\W]*

    详解正则表达式[\s\S]*与[\w\W]*

    问: 例如:[a-z]表示从a到z之间的任意一个。 不是这样的吗?谁能给我解释一下[ ]的所有用法?感谢 答: 是完全通配的意思,\s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反 这样一正一反下来,就表示所有的字符,完全的......
    03-05
  • java正则表达式陈广佳版本的介绍

    java正则表达式陈广佳版本的介绍

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串......
    03-05

最新更新