Python中正则表达式的巧妙使用

字符串的匹配查询
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方法完成空字符的压缩。
Python中正则表达式的巧妙使用的更多相关文章
- python 中 正则表达式 的应用
python 中 正则表达式 的应用 最近作业中出现了正则表达式,顺便学习了一下. python比较厉害的一点就是自带对正则表达式的支持,用起来很方便 正则表达式 首先介绍一下什么是正则表达式. 正则 ...
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
- python中正则表达式 re.findall 用法
在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 其中,re.findall() 函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表. 在python源代码中 ...
- python中正则表达式re模块详解
正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索,替换,匹配验证都不在话下. 当然,对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了. 先看一下常用的匹配 ...
- python中正则表达式在中文字符串匹配时的坑
之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因.今天终于 ...
- js中正则表达式与Python中正则表达式的区别
今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中. python中的正则提取: import re str = ...
- Python中正则表达式讲解
正则表达式是匹配字符串的强大武器,它的核心思想是给字符串定义规则,凡是符合规则的字符串就是匹配了,否则就是不合法的.在介绍Python的用法之前,我们先讲解一下正则表达式的规则,然后再介绍在Pytho ...
- 关于Python中正则表达式的反斜杠问题
之前总是搞不明白正则表达式中的反斜杠的问题.今天经过查阅资料终于搞明白了. 其中最重要的一点就是Python自己的字符串中定义的反斜杠也是转义字符,而正则表达式中的反斜杠也是转义字符,所以正则表达式中 ...
- python中正则表达式
正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的如果想查找对应规则的字符串,就可以用正则表达式python中要使用正则表达式需使用re模块,它是正则表达式在python中的封 ...
随机推荐
- (转)用graph-easy描绘kubenetes描绘k8s组件逻辑图
1.参考: https://xuxinkun.github.io/2018/09/03/graph-easy/ http://bloodgate.com/perl/graph/manual/faq.h ...
- ASP.NET Core中获取完整的URL(转载)
在之前的ASP.NET中,可以通过 Request.Url.AbsoluteUri 获取,但在ASP.NET Core没有这个实现,请问如何获取呢?方法一:先引用“using Microsoft.As ...
- 如何从现有版本1.4.8升级到element UI2.0.11
现在的项目是定死的依赖以下几个核心组件的版本: vue 2.3.3 element-ui 1.4.8 vue-template-comiler 2.3.3 将以前定死的依赖修改为 vue ^2.3.3 ...
- Git .gitignore文件的使用
本文转载自 http://blog.csdn.net/xmyzlz/article/details/8592302 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .giti ...
- WPF中的DoubleAnimation
原文:WPF中的DoubleAnimation WPF中的DoubleAnimation ...
- bitcoin 源码解析 - 交易 Transaction(二) - 原理篇
这篇文章我断断续续写了呃···· 应该快三个星期了? 所以前后的风格可能差别相当大.真是十分的怠惰啊··· 最近实在是不够努力.用python重写bitcoin的项目也卡在网络编程部分(这方面真是我的 ...
- Windows 10 中 VMware 要求禁用 Device Guard 问题
今天在打开虚拟机的时候,突然出现下面这个错误.网上给了很多教程,基本上都是禁用 Device Guard 和关闭 Hyper-v,博主按照其方法操作,依旧出现下面错误.后来经过不懈努力,终于找到解决办 ...
- Swarm基于多主机容器网络 - overlay networks 梳理
前面介绍了Docker管理工具-Swarm部署记录,下面重点说下Swarm基于多主机容器通信的覆盖网络 在Docker版本1.12之后swarm模式原生支持覆盖网络(overlay networks) ...
- 移动app rem
(function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...
- 读书笔记(chapter17)
设备类型:在所有Unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标码的机制 内核对象:内核数据结构中支持面对对象的简单操作,还支持维护对象之间的父子关系 1 ...