Python中正则表达式的巧妙用法是什么?针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到更简单易行的方法。
前言
正则表达式就是从字符串中寻找规则,通过“抽象”符号来表达。例如,对于2,5,10,17,26,37这样的数字序列,如何计算第七个值,首先要找到序列的规则,然后用表达式n2 1来描述它的规则,然后得到第七个值为50。对于需要匹配的字符串,规则的发现也是* * *的一步。本文主要利用正则表达式完成字符串的查询匹配、替换匹配和分段匹配。
常用的正则符号
在输入字符串匹配之前,让我们了解一下常用的常规符号,如下表所示:
如果读者能熟练掌握上表的内容,我相信他们就能轻松处理字符串。如前所述,本节将基于正则表达式查询、替换和分段字符串。所有这些操作都需要导入到re模块中,并使用下面描述的几个功能。
字符串的匹配查询
re模块中的findall函数可以遍历并匹配指定的字符串,获取字符串中所有匹配的子字符串,并返回一个列表结果。该函数的参数具有以下含义:
findall(模式、字符串、标志=0)
模式:指定要匹配的正则表达式。
String:指定要处理的字符串。
标志:指定匹配模式。公共值可以是re。我,re。m,re。s和re.x. The的模式。我是让正则表达式不区分大小写;re的模式。m是让正则表达式多行匹配。re的模式。s表示常规符号。它可以匹配任何字符,包括换行符。Re。x模式允许更详细地编写正则表达式,例如多行表示、忽略空白字符、添加注释等。
字符串的匹配替换
re模块中子函数的作用是替换,类似于string的replace方法。该函数根据正则表达式用repl替换匹配的内容。该函数的参数具有以下含义:
sub(模式,repl,字符串,计数=0,标志=0)
模式:与findall函数中的模式相同。
Repl:指定要替换的新值。
String:与findall函数中的字符串相同。
计数:用于指定最大替换次数。默认值是所有替换。
标志:与findall函数中的标志相同。
字符串的匹配分割
re模块中的split函数是一个split方法,它根据指定的正则表达式分离字符串,类似于字符串。该功能的具体参数具有以下含义:
拆分(模式,字符串,maxsplit=0,标志=0)
模式:与findall函数中的模式相同。
Maxsplit:用于指定* * *拆分的数量,默认值为全部拆分。
String:与findall函数中的字符串相同。
标志:与findall函数中的标志相同。
实战案例
如果已经掌握了以上函数和参数的含义,需要通过案例进一步加强理解。接下来,我们将举例说明上述三个功能:
#导入正则表达式import re的re模块#检索string8=' {ymd:' 2018-01-01 '、tianqi3360 ' sunny '、aqiInfo: '轻度污染' }、{ymd:' 2018-01-02 '中的所有天气条件。AqiInfo: '优' },{YMD :' 2018-01-03 ',天齐: '小雨到中雨',aqiInfo: '优' },{YMD :' 2018-01-04 ',天齐。)'',string8))#取出string9中所有带o字母的单词st。
ring9 = '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中正则表达式的巧妙用法是怎么样的问题的解答就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/50248.html